资源目录
压缩包内文档预览:(预览前20页/共30页)
编号:6123310
类型:共享资源
大小:25.88KB
格式:ZIP
上传时间:2017-11-24
上传人:超****计
IP属地:浙江
4.8
积分
- 关 键 词:
-
at89s52
语言
常用
经常使用
程序
资料
- 资源描述:
-
0422、AT89S52语言常用程序资料,at89s52,语言,常用,经常使用,程序,资料
- 内容简介:
-
一、闪烁灯#include / sbit gate=P20;/ 定义 P2-0口void main(void)unsigned int i,j;while(1)for(i=500;i0;i-)for(j=500;j0;j-);/ 双重循环,延时约 1秒gate=!gate;/ 对 P-0口取反,控制小灯的亮灭#include #define uint unsigned intsbit gate1=P20; / 定义 P2-0口sbit gate2=P21; / 定义 P2-1口sbit gate3=P22; / 定义 P2-2口sbit gate4=P23; / 定义 P2-3口void main(void)uint i,j;while(1)for(i=250;i0;i-)for(j=250;j0;j-); / 双重循环,延时约 0.2秒gate1=!gate1; / 对 P-0口取反,控制小灯的亮灭gate2=!gate2; / 对 P-1口取反,控制小灯的亮灭gate3=!gate3; / 对 P-2口取反,控制小灯的亮灭gate4=!gate4; / 对 P-3口取反,控制小灯的亮灭#include #include #define unit unsigned int#define uchar unsigned charsbit L0=P20;sbit L1=P21;sbit L2=P22;sbit L3=P23;uchar data BUFFER1=0; /*定时器计数变量*/void main(void)P2=0x0f; / 初始化端口EA=1; IT1=1; ET0=1;TMOD=0x01; /* T0方式 1计时 0.01秒 */TH0=-5000/256;TL0=-5000%256;TR0=1; /* 开中断,启动定时器 */for (;);/* 定时计数器 0的中断服务子程序 */void intserv1(void) interrupt 1 using 1TH0=-5000/256; / 定时器 T0的高四位赋值TL0=-5000%256;BUFFER0=BUFFER0+1; / 定时器 T0的低四位赋值if (BUFFER0=100) / 百分秒进位L3=!L3;L2=!L2;L1=!L1;L0=!L0;二、串口的简单测试程序# include void main(void) unsigned char astring;/*在 11.0592MHz晶振下,设置串行口 9600数据传输率,方式 3*/TMOD=0x20; TL1=0xfd;TH1=0xfd; SCON=0xd8;PCON=0x00; /*串口接收字符 RI置位,允许串口接收*/TR1=1;while(1)while(RI=0);RI=0; /*串口接收标志位的软件清零*/astring=SBUF;三、行列键盘的输入例程#include #include #define uchar unsigned char#define uint unsigned intvoid delays(void);uchar kbscan(void);void main(void)uchar key;while(1) key=kbscan(); /*键扫描函数*/delays(); /*键消抖的延时函数*/ 键消抖的延时函数void delays(void)uchar i;for(i=300;i0;i-);/ kbscan(void) 键扫描函数uchar kbscan(void) uchar sccode,recode;P1=0xf0; /*发全0行扫描码,列线输入*/if(P1&0xf0)!=0xf0) /*若有键按下*/delays(); /*延时去抖动*/if(P1&0xf0)!=0xf0)sccode=0xfe; /*逐行扫描初值*/while(sccode&0x10)!=0)P1=sccode; /*输出行扫描码*/if(P1&0xf0)!=0xf0) /*本行有键按下*/recode=(P1&0xf0)|0x0f;return(sccode)+(recode); /*返回特征字节码*/else sccode=(sccode#include #define uchar unsigned char#define uint unsigned intvoid delays(void);uchar kbscan(void);main()bit CRT; /*密码正确标志,=1 密码正确*/bit PRT; /*密码部分输入标志,=1 密码部分输入*/uchar COUNT; /*计数单元,存放密码正确的位数*/uchar KEY; /*被按下的键的编码*/CRT=0;PRT=0;COUNT=0;KEY=kbscan(); /*键扫描函数*/delays(); /*键消抖的延时函数*/switch (KEY)case 0xb7: /*0键*/if (CRT) else /*密码不正确时*/if (PRT) /*部分密码正确时*/COUNT=COUNT+1; /*密码正确的位数加 1*/if (COUNT=3) /*密码所有位都正确*/CRT=1;PRT=0;COUNT=0; break;case 0x7e: /*1键*/if (CRT) /*密码正确时的操作内容*/else /*密码不正确时*/PRT=0;COUNT=0; break;case 0xbe: /*2键*/if (CRT) /*密码正确时的操作内容*/else /*密码不正确时*/if (PRT) /*部分密码正确时,说明密码错误*/ PRT=0;COUNT=0;else /*密码正确位数为 0时,说明密码第一位正确*/PRT=1;COUNT=1; break;case 0xd7: /*#键*/if (CRT) /*密码正确时,锁定键盘*/CRT=0;PRT=0;COUNT=0; break;/ 键消抖的延时函数void delays(void)uchar i;for(i=300;i0;i-);/ kbscan(void) 键扫描函数uchar kbscan(void) uchar sccode,recode;P1=0xf0; /*发全0行扫描码,列线输入*/if(P1&0xf0)!=0xf0) /*若有键按下*/delays(); /*延时去抖动*/if(P1&0xf0)!=0xf0)sccode=0xfe; /*逐行扫描初值*/while(sccode&0x10)!=0)P1=sccode; /*输出行扫描码*/if(P1&0xf0)!=0xf0) /*本行有键按下*/recode=(P1&0xf0)|0x0f;return(sccode)+(recode); /*返回特征字节码*/else sccode=(sccode#include #include #include #define uchar unsigned char#define uint unsigned int#define adch0 XBYTE0x0000sbit P1_3=P13;sbit P1_2=P12;uint ch0datal,ch0datah,i,light;void main(void)EA=1; PT0=1; / 开外中断,并设置定时器;ET0=1;IT0=1;IT1=1;EX0=1;EX1=1;ET2=1;T2CON=0x08;TMOD=0x21;TH0=0xB9; / 设置定时器的初值;TL0=0xB0;TR0=1;TI=1;ch0datah=0;ch0datal=0;P1_3=0; / 设置控制端口的初值;P1_2=0;while(1) / 等待外部的控制信号;void intsvr1(void) interrupt 1 / 定时器 1模拟外部控制信号的进入TH0=0xB9;TL0=0xB0;TR0=1;light=light+1;if (light1000) P1_3=!P1_3; / MAX333的控制信号取反,工作方式变化;P1_2=!P1_2;light=0; / 标志位显示当前的工作状态; 六、单片机控制的数码管显示#include #include #include #include #define DIGPORT XBYTE 0x8000 /* 定义字位口 */#define WORDPORT XBYTE 0x4000 /* 定义字型口 */#define uchar unsigned char/* 定义共阴极字型编码表(数字 09)*/uchar code TABLE=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/ 显示:得到字型和字位口的地址后,向不同的字位送数据,进行数据的显示。/ 数码管显示计数值个位uchar digit;uchar disp,delay; / 对计数值取余数main()TMOD=0x60; /* T0方式 1计时 0.01秒 */TH1=0;TL1=0;EA=1; ET1=0; TR1=1; /* 开中断,启动定时器 */for (;)/* 数码管显示计数值低位 */digit=0x08;disp=TL1%10;DIGPORT=digit;WORDPORT=TABLEdisp;for (delay=0;delay#include #define unit unsigned int#define uchar unsigned char/*定义字型字位口*/#define DIGPORT XBYTE 0x8000#define WORDPORT XBYTE 0x4000/*定义 P1口各管脚*/sbit K0=P10;sbit K1=P11;sbit K2=P12;sbit BEEP=P13;sbit L0=P14;sbit L1=P15;sbit L2=P16;sbit L3=P17;uchar data BUFFER2=0,0; /*显示缓冲区(依次为低位,高位)*/uchar data CLOCK4=0,0,0,0; /*存放时钟时间(依次为百分秒,秒,分和时位)*/uchar data SECOND2=0,0; /*存放秒表时间(依次为百分秒,秒)*/uchar data REVERSE4=0,0,0,0; /*存放倒计时时间(依次为百分秒,秒,分和时位)*/*定义运行状态*/uchar data STATE=0;/*STATE=0,秒表*/*STATE=1,倒计时分调整*/*STATE=2,倒计时小时调整*/*STATE=3,倒计时运行*/*STATE=4 or 7,时钟运行*/*STATE=5,时钟分调整*/*STATE=6,时钟时调整*/bit bdata SND=0; /*秒表 START*/bit bdata RST=0; /*秒表 RESET*/bit bdata STP=0; /*倒计时 STOP*/*数码管显示编码09,A,-*/uchar code TABLE=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x40;void display(void)uchar i; /*显示缓冲区首址*/uchar delay; /*显示延时*/uchar disp; /*显示内容*/uchar digit; /*定义数码管显示位*/digit=0x08;for (i=0;i100) disp=BUFFERi%10+10;else disp=BUFFERi%10;DIGPORT=digit;WORDPORT=TABLEdisp;for (delay=0;delay1;disp=BUFFERi/10;DIGPORT=digit;WORDPORT=TABLEdisp;for (delay=0;delay1;void timer0(void) interrupt 1 using 1/*重置定时初值*/TH0=-5000/256;TL0=-5000%256;/*时钟处理*/CLOCK0=CLOCK0+1;if (CLOCK0=50) & (STATE=4)L0=!L0;if (CLOCK0=100)if (STATE=4) L0=!L0;CLOCK0=0;CLOCK1=CLOCK1+1;if (CLOCK1=60) CLOCK1=0;CLOCK2=CLOCK2+1;if (CLOCK2=60)CLOCK2=0;CLOCK3=CLOCK3+1;if (CLOCK3=24)CLOCK3=0;void timer2(void) interrupt 5 using 3TF2=0;TH2=-5000/256; TL2=-5000%256;/*秒表处理*/if (STATE=0)SECOND0=SECOND0+1;if (SECOND0=50)L1=!L1;if (SECOND0=100)L1=!L1;SECOND0=0;SECOND1=SECOND1+1;if (SECOND1=100) SECOND1=0; /*倒计时处理*/if (STATE=3)REVERSE0=REVERSE0+1;if (REVERSE0=50)L2=!L2;if (REVERSE0=100)L2=!L2;REVERSE0=0;REVERSE1=REVERSE1+1;if (REVERSE1=60) REVERSE1=00;REVERSE2=REVERSE2-1;if (REVERSE2=0) & (REVERSE3=0) TR2=0;STP=1;BEEP=0;else if (REVERSE2=0xff)REVERSE2=59;REVERSE3=REVERSE3-1; void intsvr1(void) interrupt 2 using 2if (STATE=5)CLOCK2=CLOCK2+1;if (CLOCK2=60) CLOCK2=0; if (STATE=6)CLOCK3=CLOCK3+1;if (CLOCK3=24) CLOCK3=0; void timer1(void) interrupt 3 using 3if (STATE=0)if (RST)SECOND0=0;SECOND1=0;L1=1;RST=0;else if (SND) TR2=1;else L1=1;TR2=0;RST=1;SND=!SND;else if (STATE=1)REVERSE2=REVERSE2+1;if (REVERSE2=60) REVERSE2=0; else if (STATE=2)REVERSE3=REVERSE3+1;if (REVERSE3=24) REVERSE3=0;else if (STP) BEEP=1;L2=1;STP=0; else TR2=0;void main(void)uchar stabak; /*上一次程序运行的状态*/P1=0x0f;EA=1; IT1=1; ET0=1;TMOD=0x61; /*T1方式 2计数,T0 方式 1计时*/TH0=-5000/256; TL0=-5000%256;TH1=0xff; TL1=0xff;T2CON=0; TH2=-5000/256; TL2=-5000%256;K0=1; K1=1; K2=1;STATE=P1&0x07;stabak=STATE;for (;)switch (STATE)case 0: /*STATE=0,秒表*/EX1=0; ET1=1; ET2=1; TR1=1; SND=1;L1=1; L0=0; L2=0;SECOND0=0;SECOND1=0; break;case 1: /*STATE=1,倒计时分调整*/EX1=0; ET1=1; ET2=1; TR1=1; TR2=0;L2=1; L0=0; L1=0;REVERSE0=0;REVERSE1=0; break;case 2: /*STATE=2,倒计时小时调整*/EX1=0; ET1=1; ET2=1; TR1=1; TR2=0;L2=1; L0=0; L1=0;REVERSE0=0;REVERSE1=0; break;case 3: /*STATE=3,倒计时运行*/EX1=0; ET1=1; ET2=1; TR1=1; if (REVERSE2=0)&(REVERSE3=0) L2=1;else TR2=1;L0=0; L1=0; break;case 5: /*STATE=5,时钟分调整*/IE1=0; EX1=1; ET1=0; ET2=1; TR0=0; L0=1; L1=0; L2=0; break;case 6:/*STATE=6,时钟时调整*/IE1=0; EX1=1; ET1=0; ET2=1; TR0=0; L0=1; L1=0; L2=0; break;default: /*STATE=4 or 7,时钟运行*/EX1=0; ET1=0; ET2=1; TR0=1;L1=0; L2=0;while (STATE=stabak) switch (STATE)case 0: /*STATE=0,秒表*/BUFFER0=SECOND0;BUFFER1=SECOND1; break;case 1: /*STATE=1,倒计时分调整*/BUFFER0=REVERSE2;BUFFER1=101;/*A-*/ break;case 2: /*STATE=2,倒计时小时调整*/BUFFER0=110;/*-A*/BUFFER1=REVERSE3; break;case 3: /*STATE=3,倒计时运行*/BUFFER0=REVERSE2;BUFFER1=REVERSE3; break;case 5: /*STATE=5,时钟分调整*/BUFFER0=CLOCK2;BUFFER1=101;/*A-*/ break;case 6: /*STATE=6,时钟时调整*/BUFFER0=110;/*-A*/BUFFER1=CLOCK3; break;default: /*STATE=4 or 7,时钟运行*/BUFFER0=CLOCK2;BUFFER1=CLOCK3;display();K0=1; K1=1; K2=1;STATE=P1&0x07;stabak=STATE;八、微型打印机和单片机的接口程序# include # include # define CW8155 0XEF00# define B8155 0XEF02# define C8155 0XEF03# define uchar unsigned charuchar datap;void pchar(uchar i)XBYTEB8155=i;XBYTEC8155=0X00;XBYTEC8155=0X01; main(void)EA=1; PT0=1; / 开外中断,并设置定时器;ET0=1;IT0=1;IT1=1;EX0=1;EX1=1;ET2=1;T2CON=0x08;TMOD=0x21;datap=*; / 输出打印字符pchar(datap);九、DS1820 温度测量程序#include #include #include #include #define uchar unsigned char#define uint unsigned intsbit P3_5=P35;uchar TEMP; / 温度值的变量;uchar flag1; / 结果为负和正的标志位。void delay (unsigned int count)unsigned int i;while (count)i =200;while (i0) i-;count-;void tmreset (void) / 发送复位和初始化unsigned int i;P3_5 = 0;i = 103;while (i0) i-; / 延时P3_5 = 1;i = 4;while (i0) i-;bit tmpread (void) / 读取数据的一位 unsigned int i;bit dat;P3_5 = 0; i+;P3_5 = 1; i+; i+; /延时dat = P3_5;i = 8; while (i0) i-; / 延时return (dat);unsigned char tmpread2 (void) /读一个字节unsigned char i,j,dat;dat = 0;for (i=1;i 1);return (dat);void tmpwrite (unsigned char dat) /写一个字节 unsigned int i;unsigned char j;bit testb;for (j=1;j 1;if (testb)P3_5 = 0; / 写 0 i+; i+; P3_5 = 1;i = 8; while (i0) i-; elseP3_5 = 0; / 写 0 i = 8; while (i0) i-; P3_5 = 1;i+; i+; void tmpchange(void) / ds1820 开始转换 tmreset (); / 复位/tmpre (); / 等待存在脉冲delay (1); / 延时tmpwrite (0xcc); / 跳过序列号命令tmpwrite (0x44); / 发转换命令 44H,void tmp (void) / 读取温度 unsigned char a,b;tmreset (); / 复位delay (1); / 延时tmpwrite (0xcc); / 跳过序列号命令tmpwrite (0xbe); / 发送读取命令a = tmpread2 (); / 读取低位温度b = tmpread2 (); /读取高位温度flag1=b; /若 b为 1则为负温if(flag1)TEMP=a+1; /如果为负温则去除其补码elseTEMP=a;rom() / 读取器件序列号子程序tmreset (); /复位delay (1); /延时tmpwrite(0x33); /发送读序列号子程序 main()dotmpchange(); / 开始温度转换delay(200); / 读取延时tmp(); /读取温度while(1);十、单片机的电流检测程序#include #include #include #include #define uchar unsigned char#define uint unsigned int#define adch0 XBYTE0x0000sbit P1_6=P16;sbit P1_7=P17;uint ch0datal,ch0datah,i,light;void main(void)EA=1; PT0=1; / 开外中断,并设置定时器;ET0=1;IT0=1;IT1=1;EX0=1;EX1=1;ET2=1;T2CON=0x08;TMOD=0x21;TH0=0xB9; / 设置定时器的初值;TL0=0xB0;TR0=1;TI=1;ch0datah=0;ch0datal=0;P1_6=0; / 设置控制端口的初值;P1_7=0;while(1) / 等待外部的控制信号;void intsvr1(void) interrupt 1 / 定时器 1模拟外部控制信号的进入TH0=0xB9;TL0=0xB0;TR0=1;light=light+1;if (light1000)P1_6=!P1_6; / 控制信号取反,工作方式变化;P1_7=!P1_7;light=0; / 标志位显示当前的工作状态; 十一、单片机驱动直流电机的例程#include #include #define uchar unsigned char#define uint unsigned intbit gate; / 定时标志位bit direct; /*设置电机正反转标志,0-正转;1-反转*/sbit motor1=P12;sbit motor2=P13; /*10-正转;01-反转*/uchar data BUFFER1=0; /*定时器计数变量*/ 主程序,定义中断源和串口工作方式。void main (void)P2=0x0f; / 初始化端口EA=1; IT1=1; ET0=1;TMOD=0x01; /* T0方式 1计时 1秒 */TH0=-5000/256;TL0=-5000%256;TR0=1; /* 开中断,启动定时器 */gate=1; / 依据转向状态决定电机的动作for (;)if (gate) motor1=1;motor2=0;elsemotor1=0;motor2=1;/* 定时计数器 0的中断服务子程序 */void timer0(void) interrupt 1 using 1TH0=-5000/256; / 定时器 T0的高四位赋值TL0=-5000%256;BUFFER0=BUFFER0+1; / 定时器 T0的低四位赋值if (BUFFER0=100) / 百分秒进位gate=! gate; / 转向标志取反 十二、单片机数模输出控制 LED亮度的例程#include#include #define uchar unsigned char#define uint unsigned int#define addatal XBYTE0xBFFF#define addatah XBYTE0xDFFFuint datal,datah ;uchar data BUFFER1=0; /*定时器计数变量*/设置 P1.1,查询 MAX526的工作状态sbit P1_1=P11;main()EA=1; IT1=1; ET0=1;TMOD=0x01; /* T0方式 1计时 1秒 */TH0=-5000/256;TL0=-5000%256;TR0=1; /* 开中断,启动定时器 */for (;); /* 定时计数器 0的中断服务子程序 */void timer0(void) interrupt 1 using 1TH0=-5000/256; / 定时器 T0的高四位赋值TL0=-5000%256;BUFFER0=BUFFER0+1; / 定时器 T0的低四位赋值if (BUFFER0=100) / 百分秒进位/ 使用查询的方法读 MAX526的 LDAC,检测 MAX526是否完成了信号的采集while(P1_1!=0)/ 当数据采集完成时,先读低位;P1_1=0;datal=addatal;/ 当数据采集完成时,再读高位;P1_1=1;datah=addatah;P1_1=0; 十三、基于单片机的信号发生器例程#include#include #define uchar unsigned char#define uint unsigned intvoid delays(void);uchar kbscan(void);sbit A0=P21;sbit A1=P22;uchar key;void delays(void)uchar i;for(i=300;i0;i-);/ kbscan(void) 键扫描函数uchar kbscan(void) uchar sccode,recode;P1=0xf0; /*发全0行扫描码,列线输入*/if(P1&0xf0)!=0xf0) /*若有键按下*/delays(); /*延时去抖动*/if(P1&0xf0)!=0xf0)sccode=0xfe; /*逐行扫描初值*/while(sccode&0x10)!=0)P1=sccode; /*输出行扫描码*/if(P1&0xf0)!=0xf0) /*本行有键按下*/recode=(P1&0xf0)|0x0f;return(sccode)+(recode); /*返回特征字节码*/else sccode=(sccode#include #define uchar unsigned char#define uint unsigned intuint FREQ; /*定时器计数变量*/uint FREQ_out; /*输出频率变量*/uint delay;sbit SEL0=P30;sbit SEL1=P31;sbit FSGN=P35; /设置 P3.5,作为信号输出引脚;/* 定时计数器 0的中断服务子程序 */void timer0(void) interrupt 1 using 1TH0=-1000/256; / 定时器 T0的高四位赋值TL0=-1000%256;FREQ=FREQ+1; / 定时器 T0的低四位赋值if (FREQ=FREQ_out) / 周期时间长短的判断FREQ=0;FSGN=!FSGN; / 信号输出端口取反/* 外中断 0的中断服务子程序 */void intsvr0(void) interrupt 0 using 1TR0=1; / 开始输出方波/* 外中断 0的中断服务子程序 */void intsvr1(void) interrupt 2 using 1FREQ_out = FREQ_out +5000; / 输出的方波频率减 1; main()EA=1; ET0=1;IT0=1; IT1=1; EX0=1;EX1=1; / 开外中断和定时中断TMOD=0x01; /* T0方式 1计时 5秒 */TH0=-1000/256; / 1ms的初值TL0=-1000%256;TR0=0; /* 开中断,启动定时器 */FREQ=0;FREQ_out=5000;FSGN=1;while(1)for (delay=0;delay#include #define uchar unsigned char#define uint unsigned int/*输出给舵机的控制信号:周期 18ms,脉宽由原始控制信号输入脉宽和陀螺反馈输入脉宽计算得到的方波*/sbit P1_2=P12; /sbit EXF2=T2CON6; /*T2外中断标志位*/uchar flag_int0; / 外中断输入的标志位uint HELMNUM=0; /*存放输出给舵机的控制信号的脉宽时间*/uchar N; / 定时器溢出次数uchar time_sgn; / 输入方波的周期变量uchar T1H,T1L; / 定时器 T1的高低位变量main()/*初始化:打开 INT0、INT1 和 T2,设置 T2的优先级为最高*/ 这是因为 T2所记录的中断是输出信号的控制周期,所以其优先有必要设为最高。EA=1; IT0=1; IT1=1; EX0=1; EX1=1; ET2=1;T2CON=0x08; /*设置 T2工作方式:允许接收 P1.1引脚的下降沿中断,计数器停止*/TMOD=0x99; /*设置 T0、T1 工作方式:门控方式 1定时*/TR0=1; TR1=1;for (;); / 外中断 0的控制 T1计数子程序void int0svr(void) interrupt 0 using 1 if (flag_int0=1)flag_int0=0;T1H=TH1;T1L=TL1;time_sgn=N*65536+T1H*256*T1L;TH1=0;TL1=0;if (flag_int0=0)flag_int0=1;TH1=0;TL1=0;TR1=1;/ T1计数子程序void timer1(void) interrupt 3 using 1TH1=0; / 定时器 T1的高四位赋值TL1=0; / 定时器 T1的低四位赋值N=N+1; / 定时器的溢出次数/* 定时计数器 2的中断服务子程序 */void timer2(void) interrupt 5 using 3/ 判断中断类型:EXF2=1 时为 P1.1引脚下降沿触发的中断;TF2=1 为 T2定时时间到触发的中断if (TF2)TF2=0;TH2=- (time_sgn /4)/256;TL2=- (time_sgn /4)%256;T2CON=0x0c;P1_2=!P1_2; 十六、电机转速信号的单片机测量程序#include #include #include #define uchar unsigned char#define uint unsigned int/ 定义 8253的寄存器地址#define COM XBYTE0x6000 / 定义 8253的控制字寄存器地址#define C0 XBYTE0x0000 / 定义 8253的计数器 0寄存器地址#define C0I XBYTE0x1000sbit P1_7=P17;uint BUF810;uchar h,l,a,b,c,sendflag,FREQ;/主函数,初始化定时器和片外寄存器void main(void)EA=1; PT0=1;ET0=1;IT0=1;IT1=1;EX0=1;EX1=1;ET2=1;T2CON=0x08;TMOD=0x21; /用定时器 0产生 2s的中断信号,为 8253计数提供门控。TH0=-1000/256; TL0=-1000%256;/ 向 8253R中的控制字寄存器中选择计数器 0,并对其幅初值 0;COM=0x30;C0=0;C0=0;TR0=1;sendflag=1;while(1)/* 定时计数器 0的中断服务子程序 */void timer0(void) interrupt 1 using 1TH0=-1000/256; / 定时器 T0的高四位赋值TL0=-1000%256;FREQ=FREQ+1; / 定时器 T0的低四位赋值if (FREQ=1000) / 1秒判断FREQ=0;P1_7=!P1_7; / 信号输出端口取反COM=0x00; /计数器 0闩锁操作l=C0; /分别读取高、低 8位的数据h=C0;BUF810=-(h*256+l);COM=0x30;C0=0;C0I=0; 十七、单片机间的 RS232串行通信程序#include#include #include #include #include #define uchar unsigned char#define uint unsigned intuchar FREQ; /*定时器计数变量*/void main(void)/ 以下是设置中断和定时器EA=1; PT0=1; ET0=1;IT0=1;IT1=1;EX0=1;EX1=1;ET2=1;T2CON=0x08;TMOD=0x21;/ 定时器 0为产生 1ms的中断,定时器 1为 9600bit/s 的波特率发生器TH0=-1000/256;TL0=-1000%256;TL1=0xfd;TH1=0xfd;SCON=0x50;PCON=0x80;/ 开定时器TR1=1;TR0=1;TI=1;while(1)/ 定时器 0的中断服务程序,向串口发送姿态数据。void intsvr1(void) interrupt 1/ 重新装入定时器 0的初值;TH0=-10000/256;TL0=-10000%256;FREQ=FREQ+1; / 定时器 T0的低四位赋值if (FREQ=1000) / 1秒判断FREQ=0;printf(*); / 发送字符 十八、单片机和 PC之间的串行通信程序#include#include #include #include #include #define uchar unsigned char#define uint unsigned intuchar FREQ; /*定时器计数变量*/void main(void)/ 以下是设置中断和定时器EA=1; PT0=1; ET0=1;IT0=1;IT1=1;EX0=1;EX1=1;ET2=1;T2CON=0x08;TMOD=0x21;/ 定时器 0为产生 1ms的中断,定时器 1为 9600bit/s 的波特率发生器TH0=-1000/256;TL0=-1000%256;TL1=0xfd;TH1=0xfd;SCON=0x50;PCON=0x80;/ 开定时器TR1=1;TR0=1;TI=1;while(1)/ 定时器 0的中断服务程序,向串口发送姿态数据。void intsvr1(void) interrupt 1/ 重新装入定时器 0的初值;TH0=-10000/256;TL0=-10000%256;FREQ=FREQ+1; / 定时器 T0的低四位赋值if (FREQ=1000) / 1秒判断FREQ=0;printf(*); / 发送字符 十九、单片机的无线数据传输例程#include #include #include #define uchar unsigned c
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。