这是我写的红外发射程序,不成功,不知道错在哪里了?
我测的晶振是11.030,所以有些定时器数据是按11.030计算的.
反复测试按11.5092和11.030设置定时器数据都不成功,二个差值也不大.
不知道错在哪里,希望大神指导一下!!!!!
单片机源程序如下:
- #include<reg52.h>
- #define uint unsigned int
- #define uchar unsigned char
-
- sbit fs=P1^5;
- uchar i;
- uchar sj[]={ 1,0,0,0,0,0,0,0, 0,1,1,1,1,1,1,1, 0,0,0,0,0,0,0,0, 1,1,1,1,1,1,1,1,
-
- }; //需要发送的数据
- void delayns(uchar i)
- {
- while(i--);
- }
- void Delay() //@11.0592MHz
- {
- unsigned char i, j, k;
- i = 16;
- j = 19;
- k = 10;
- do
- {
- do
- {
- while (--k);
- } while (--j);
- } while (--i);
- }
- void init()
- {
- TMOD=0X11;
- EA=1;
- ET0=1;
- }
- void t0() interrupt 1
- {
- fs=~fs;
- TR0=0;
- TF0=0;
- }
- void n1()
- {
- <strong> </strong> TH0=0xdf;
- TL0=0x99; //定时9MS
- fs=0; //开始发
- TR0=1; //开始定时
- while(!TF0); //中断变低
-
- TH0=0xEF;
- TL0=0xcc; //定时4.5MS
- TR0=1;
- while(!TF0); //中断高
- }
- void s1()
- {
- TH0=0xfd; //定时562US
- TL0=0xfa;
- TR0=1;
- while(!TF0); //中断变低
-
- TH0=0xf9; //定时1654US
- TL0=0xef;
- TR0=1;
- while(!TF0); //中断变高
- }
- void s0()
- {
- TL0=0xfa; //定时562US
- TH0=0xfd;
- TR0=1; //中断变低
- while(!TF0);
-
- TL0=0xfa; //定时562US
- TH0=0xfd;
- TR0=1;
- while(!TF0); //中断变高
-
- }
- void main()
- {
- init();
- while(1)
- {
- n1();
- for(i=0;i<32;i++){if(sj[i]==0)s0();else {s1();}}
- delayns(58);fs=1; //结束号562US后变低
- Delay();
- }
-
- }
复制代码
|