仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
- #include <reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- uint time;
- sbit led=P1^0;
- /*************************延时程序*********************/
- void delay(uint count) //1ms延时
- {
- uint x,y;
- for(x=0;x<count;x++)
- for(y=0;y<120;y++);
- }
- /*void delay(uint z)
- {
- uint x,y;
- for(x = z; x > 0; x--)
- for(y = 114; y > 0 ; y--);
- }
- */
- void timer2_main()
- {
- // T2MOD=0; //配置定时器2控制寄存器,这里其实不用配置,T2CON上电默认就是0
- // T2CON=0; //配置定时器2工作模式寄存器,这里其实不用配置,T2MOD上电默认就是0
- TH2=(65536-50000)/256; //定时器2赋初值
- TL2=(65536-50000)%256; //50ms
- ET2=1; //开定时器2中断
- EA=1;
- TR2=1; //启动定时器2
- }
- /*
- void UART_init()
- {
- TMOD = 0x20; //T1工作模式2 8位自动重装
- TH1 = 0xfd;
- TL1 = 0xfd; //比特率9600
- TR1 = 1; //启动T1定时器
- SM0 = 0;
- SM1 = 1; //串口工作方式1 10位异步
- // REN = 1; //串口允许接收
- EA = 1; //开总中断
- // ES = 1; //串口中断打开
- }
- void UART() //interrupt 4
- {
- SBUF = "你好";// 06 02 78;
- while(!TI);
- TI = 0;
- }*/
- void main()
- {
- timer2_main(); //定时器T2初始化
- // UART_init(); //串口初始化
- while(1){
- /* if(SET==0) //设定按键按下
- {
- delay(5);
- if(SET==0)
- { //延时去除抖动再次判断是否按下按键
- UART();
- while(!SET);
- }
- } */
- }
- }
- void timer2() interrupt 5
- {
- TF2=0; //!!!注意!!! 定时器2必须由软件对溢出标志位清零,硬件不能清零
- time++;
- if(time==100) //定时50ms×100=5000ms即5秒钟
- {
- time=0;
- led=~led;
- }
- }
复制代码
所有资料51hei提供下载:
定时器TOME2.zip
(81.29 KB, 下载次数: 52)
|