|
這是我寫的紅外發(fā)射程序,不成功,不知道錯(cuò)在哪里了?
我測(cè)的晶振是11.030,所以有些定時(shí)器數(shù)據(jù)是按11.030計(jì)算的.
反復(fù)測(cè)試按11.5092和11.030設(shè)置定時(shí)器數(shù)據(jù)都不成功,二個(gè)差值也不大.
不知道錯(cuò)在哪里,希望大神指導(dǎo)一下!!!!!
單片機(jī)源程序如下:
- #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,
-
- }; //需要發(fā)送的數(shù)據(jù)
- 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; //定時(shí)9MS
- fs=0; //開始發(fā)
- TR0=1; //開始定時(shí)
- while(!TF0); //中斷變低
-
- TH0=0xEF;
- TL0=0xcc; //定時(shí)4.5MS
- TR0=1;
- while(!TF0); //中斷高
- }
- void s1()
- {
- TH0=0xfd; //定時(shí)562US
- TL0=0xfa;
- TR0=1;
- while(!TF0); //中斷變低
-
- TH0=0xf9; //定時(shí)1654US
- TL0=0xef;
- TR0=1;
- while(!TF0); //中斷變高
- }
- void s0()
- {
- TL0=0xfa; //定時(shí)562US
- TH0=0xfd;
- TR0=1; //中斷變低
- while(!TF0);
-
- TL0=0xfa; //定時(shí)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; //結(jié)束號(hào)562US后變低
- Delay();
- }
-
- }
復(fù)制代碼
|
|