本帖最后由 zwm111 于 2017-5-5 17:55 编辑
- <div class="blockcode"><blockquote>#include "reg51.h"
- #include "intrins.h"
- typedef unsigned char BYTE;
- typedef unsigned int WORD;
- sfr AUXR = 0x8e; //辅助寄存器
- sfr S2CON = 0x9a; //UART2 控制寄存器
- sfr S2BUF = 0x9b; //UART2 数据寄存器
- sfr T2H = 0xd6; //定时器2高8位
- sfr T2L = 0xd7; //定时器2低8位
- sfr IE2 = 0xaf; //中断控制寄存器2
- WORD vel=0;
- sbit P10=P1^0;
- bit busy;
- void UartInit(void) //9600bps@11.0592MHz
- {
- SCON = 0x50; //8位数据,可变波特率
- AUXR |= 0x04; //定时器2时钟为Fosc,即1T
- T2L = 0xE0; //设定定时初值
- T2H = 0xFE; //设定定时初值
- AUXR |= 0x01; //串口1选择定时器2为波特率发生器
- AUXR |= 0x10; //启动定时器2
- }
- void Timer0Init(void) //10微秒@11.0592MHz
- {
- AUXR |= 0x80; //定时器时钟1T模式
- TMOD &= 0xF0; //设置定时器模式
- TMOD |= 0x02; //设置定时器模式
- TL0 = 0x91; //设置定时初值
- TH0 = 0x91; //设置定时重载值
- TF0 = 0; //清除TF0标志
- TR0 = 1; //定时器0开始计时
- }
- /*----------------------------
- 发送串口数据
- ----------------------------*/
- void SendData(BYTE dat)
- {
- while (busy); //等待前面的数据发送完成
- busy = 1;
- SBUF = dat; //写数据到UART数据寄存器
- }
- void main()
- {
- UartInit();
- Timer0Init();
- while(1);
- }
- void timer0 (void) interrupt 1
- {
- if(vel==200)
- {
- P10=~P10;
- SendData(P10);
- vel=0;
- }
- vel++;
- }
- void Uart() interrupt 4 using 1
- {
- if (RI)
- {
- RI = 0; //清除RI位
- }
- if (TI)
- {
- TI = 0; //清除TI位
- busy = 0; //清忙标志
- }
- }
我想开启两个定时器,定时器0和定时器2,单个定时器我都能成功开通,但两个一起开,串口能正常工作,定时器0不能正常工作。串口信号送不出P10的值,单独开通串口能正常工作,不知我那里写错了,高手能指导下一二。
|