- 1、本文档共39页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
08.12.17第8章
第8章 综合实例;【例1】 利用单片机的P0口接8个发光二极管,P1口接8个开关,编程实现,当开关动作时,对应的发光二极管亮或灭。只须把P0口的内容读出后,通过P1口输出即可。
C51语言程序:
#include <reg51.h>
void main(void)
{
unsigned char i;
P0=0xff;
for(;;) { i=P0;P1=i; }
};【例2】 设系统时钟频率为12MHZ,用定时/计数器T0编程实现从P1.0输出周期为500μs的方波。
分析:从P1.0输出周期为500μs的方波,只须P1.0每250μs取反一次则可。当系统时钟为12MHZ,定时/计数器T0工作于方式2时,最大的定时时间为256μs,满足250μs的定时要求,方式控制字应设定(02H)。系统时钟为12MHZ,定时250μs,计数值N为250,初值X=256-250=6,则TH0=TL0=06H。;(1)采用中断处理方式的程序:;(2)采用查询方式处理的程序;【例3】设系统时钟频率为12MHZ,编程实现从P1.1输出周期为1s的方波。
根据例2的处理过程,这时应产生500ms的周期性的定时,定时到则对P1.1取反就可实现。由于定时时间较长,一个定时/计数器不能直接实现,可用定时/计数器T0产生周期性为10ms的定时,然后用一个寄存器R2对10ms计数50次或用定时/计数器T1对10ms计数50次实现。系统时钟为12MHZ,定时/计数器T0定时10ms,计数值N为10000,只能选方式1,方式控制字(01H),
初值X:
X=65536-10000=55536=1101100011110000B
则TH0=D8H,TL0=F0H。;C语言程序:
# include <reg51.h> //包含特殊功能寄存器库
sbit P1_1=P1^1;
char i;
void main()
{
TMOD=0x01;
TH0=0xD8;TL0=0xf0;
EA=1;ET0=1;
i=0;
TR0=1;
while(1);
}
void time0_int(void) interrupt 1 //中断服务程序
{
TH0=0xD8;TL0=0xf0;
i++;
if (i= =50) {P1_1=! P1_1;i=0;}
};【例4】用8051单片机的串行口外接串入并出的芯片CD4094扩展并行输出口控制一组发光二极管,使发光二极管从左至右延时轮流显示。; 8051;【例5】 用8051单片机的串行口外接并入串出的芯片CD4014扩展并行输入口,输入一组开关的信息。;C语言程序:
# include <reg51.h> //包含特殊功能寄存器库
sbit P1_0=P1^0;
sbit P1_1=P1^1;
void main()
{
unsigned char i;
P1_1=1;;【例6】某工业监控系统,具有温度、压力、PH值等多路监控功能,中断源的连接如图5.26所示。对于PH值,在小于7时向CPU申请中断,CPU响应中断后使P3.0引脚输出高电平,经驱动,使加碱管道电磁阀接通1秒钟,以调整PH值。;电磁阀;C语言程序:
#include <reg51.h>
sbit P10=P1^0;
sbit P11=P1^1;
sbit P12=P1^2;
sbit P13=P1^3;
sbit P16=P1^6;
sbit P30=P3^0;
void int0() interrupt 0 using1
{
void int00();
void int01();
void int02();
void int03();
if (P10= =1) {int00();} //查询调用对应的函数
else if (P11= =1) {int01();}
else if (P12= =1) {int02();}
else if (P13= =1) {int03();}
};用C语言编程实现双机通信。
要实现甲与乙两台单片机点对点的双机通信,线路只须将甲机的TXD与乙机的RXD相连,将甲机的RXD与乙机的TXD相连,地线与地线相连。
通信中双机作如下约定:
通信开始时,甲机先发送一个信号AA,乙机接收到后回答一个信号BB,表示同意接收。甲机收到BB后,就可以发送数据了。假定发送10个字符,数据缓冲区为buf,数据发送完后发送一个校验和。乙机接收到数据后,存入乙机的数据缓冲区中,并用接收的数据产生校验和与接收的校验和相比较,如相同,乙机发送00H,回答接收正确;如不同,则发送0
文档评论(0)