單片機源程序如下:
- #include<reg52.h>
- #include "delay.h"
- sbit OUT = P0^0;
- unsigned char TH_H,TL_H,TH_L,TL_L;//
- /*------------------------------------------------
- 定時器初始化子程序
- ------------------------------------------------*/
- void Init_Timer0(void)
- {
- TMOD |= 0x01; //使用模式1,16位定時器,使用"|"符號可以在使用多個定時器時不受影響 TOMD = TOMD | 0X01
- TH0=0x00; //給定初值,這里使用定時器最大值從0開始計數一直到65535溢出
- TL0=0x00;
- EA=1; //總中斷打開
- ET0=1; //定時器中斷打開
- TR0=1; //定時器開關打開
- }
- /*------------------------------------------------
- 數據處理
- ------------------------------------------------*/
- void DataPro(unsigned int temp)
- {
- TH_H=(65536-temp)/256;
- TL_H=(65536-temp)%256;
- TH_L=(46536+temp)/256;
- TL_L=(46536+temp)%256;
- }
- /*------------------------------------------------
- 主程序
- ------------------------------------------------*/
- main()
- {
- unsigned int temp=1500;
- bit flag=0;
- Init_Timer0();
- DataPro(temp);
- while(1)
- {
- while(!flag){
- if(temp<2300)
- temp+=10;
- else
- flag=1;
- DelayMs(3);
- DataPro(temp);
- }
- while(flag)
- {
- if(temp>700)
- temp-=10;
- else
- flag=0;
- DelayMs(3);
- DataPro(temp);
- }
- }
- }
- /*------------------------------------------------
- 定時器中斷子程序
- ------------------------------------------------*/
- void Timer0_isr(void) interrupt 1
- {
- if(OUT)
- {
- TH0=TH_L; //重新賦值
- TL0=TL_L;
- }
- else
- {
- TH0=TH_H; //重新賦值
- TL0=TL_H;
- }
- OUT=!OUT;
- }
復制代碼
|