這是我寫的紅外發射程序,不成功,不知道錯在哪里了?
我測的晶振是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();
- }
-
- }
復制代碼
|