#include "HT66F0185.h" #include "LCD.h" #include "ntc.h" #define CLED _pa3 #define BEEP _t1on #define u8 unsigned char #define u16 unsigned int #define bps9600 12 //sys=8m //#define bps9600 19 //sys=12m volatile u8 recdata=0; volatile u8 beeptime=0; void delay_ms(u16 ms) { while(ms--) { GCC_DELAY(2000);//编译器自带延时指定个周期,在主频8Mhz下,一个指令周期为0.5us GCC_CLRWDT(); } } void UART_SendChar(u8 data) { if(_txif) //判断发送数据寄存器为空 { _txr_rxr=data; //写入TXR--------清标志位TXIF,TXIF=1标志TXR写入TSR,0标志禁止写入TXR中已有数据 while(!_txif); //等待数据写入TSR while(!_tidle); //等待数据传输结束 } } void pwminit() { _pac7=0; _pa7=0; _t1cp=1;//设置端口为定时器端口 _tm1c0=0x20;//clk=sys/16 _tm1c1=0xa8;//pwm模式 高电平有效 比较器P匹配清0 _tm1rpl=125;//f=sys/16/125=4k _tm1rph=0; _tm1al=62;//duty=62/125=49.6% _tm1ah=0; } void main() { u8 temp; u16 delaytime=0; _wdtc=0xa8;//关闭看门狗 _csel=0;// _cos=1;// _acerl=0;// //uart init _pdc2=0; _pd2=1; _pdc1=1; _pdpu1=1; _ucr1=0x80; _ucr2=0xc4; _brg=bps9600; _ure=1; //串口中断使能 _emi=1; ntcinit(); lcdinit(); pwminit(); _tbc=0xc4;//时基信号 tbc=fsys/4 溢出周期:t=2^12/tbc=2.048ms _tb0e=1;//允许时基中断 _emi=1;//打开总中断 dispnum(0000); while(1) { if(++delaytime>1000) { delaytime=0; temp=GetTemp(); dispnum(temp);//显示温度 UART_SendChar(temp/10%10+'0'); UART_SendChar(temp%10+'0'); UART_SendChar(0X0D); UART_SendChar(0X0A); } if(beeptime>0) { beeptime--; BEEP=1; } else { BEEP=0; } delay_ms(1); } } //时基中断 2.048ms DEFINE_ISR(tb0,0x1c) { LcdScan(); } //中断标志位自动清除 DEFINE_ISR(UART_Int,0x2c) { if(_rxif)//RXR寄存器中有数据 { recdata=_txr_rxr; if(recdata=='B') { beeptime=100; } } } |