单片机程序案例(全部调试通过_部分附仿真图)(4)

2018-12-04 22:07

}

void timer0() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%6; num++; }

本实验巧用标志位,老师都夸我逻辑好~ 仿真图:

C2U1R9VCC10k30pF19U2P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD39383736353433322122232425262728101112131415161723456789111D0D1D2D3D4D5D6D7LEOE74HC573Q0Q1Q2Q3Q4Q5Q6Q71918171615141312X1XTAL1C330pFCRYSTAL18XTAL2C110uF9RST293031PSENALEEAU323456789111D0D1D2D3D4D5D6D7LEOE74HC573Q0Q1Q2Q3Q4Q5Q6Q7191817161514131212345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51C40.1uF

实验七 定时器/计数器实验(二)

一、实验目的

1、掌握单片机定时器/计数器的工作方式和编程原理; 2、掌握外部脉冲计数方法。

二、实验设备及器材

单片机实验箱一台;PC机一台;USB下载线一根。

三、实验内容

单片机的定时器/计数器就是一个16位二进制加法计数器,当选择计数模式时,计数脉冲来自于外部引脚P3.4(T0),P3.5(T1),因此,只需要初始化时将计数寄存器清零,启动计数器,然后读取计数寄存器的数值即可知外部脉冲个数。

编写程序实现对T0引脚输入的外部脉冲进行计数,并在数码管上显示计数结果。外部脉冲由独立按键S29产生,要求S29每按一次,产生一个脉冲,数码管显示的数字加1。

画出程序流程图,编写程序,并下载调试。独立式按键原理图见实验四中图4-1所示,单片机与数码管接口电路原理图见实验五中图5-1所示。

四、思考题

1、按键的抖动对本实验有何影响?如何消除?

2、请设计程序,实现每当外部脉冲计数达到5个时,数码管显示的数字加1。 程序代码:

#include

16

sbit t0=P3^4; sbit wela=P3^7; sbit dula=P3^6;

char code table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; char code t[5]={0xef,0xf7,0xfb,0xfd,0xfe}; char numd;

void delayms(char xms) {

char a,b;

for(a=xms;a>0;a--)

for(b=125;b>0;b--); }

void display() {

char num[4],i; num[0]=numd; num[1]=numd0/10; num[2]=numd00/100; num[3]=numd/1000; num[4]=numd/10000; for(i=0;i<5;i++) {

wela=0; dula=1; P0=table[num[i]]; wela=1; dula=0; P0=t[i]; delayms(10); P0=0xff; } }

void main() {

TMOD=0X05; TL0=0; TH0=0; TR0=1; ET0=1; EA=1; while(1) {

numd=TL0; display(); } }

17

思考题2部分,只要在主函数while(1)循环中,把numd=TL0;改为numd=TL0/5;即可。 本实验计数的上限是65535,到达65535次自动归0。 仿真图:

C2U1R9VCC10k30pF19U2P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD39383736353433322122232425262728101112131415161723456789111D0D1D2D3D4D5D6D7LEOE74HC573Q0Q1Q2Q3Q4Q5Q6Q71918171615141312X1XTAL1C330pFCRYSTAL18XTAL2C110uF9RST293031PSENALEEAU323456789111D0D1D2D3D4D5D6D7LEOE74HC573Q0Q1Q2Q3Q4Q5Q6Q7191817161514131212345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51C40.1uF0.1uF 本题的抖动问题,是用硬件消除的,在软件部分不显示。之前不知道可以不去抖动,软件试了很多次都不成功。老师后来说软件是没法弄的,总觉得是可以的,你可以试试。

实验八 串口通信实验

一、实验目的

1、掌握串行口的工作方式及其设置; 2、掌握串行口工作方式1的应用; 3、掌握串行口的波特率设置。

二、实验设备及器材

单片机实验箱一台;PC机一台;USB下载线一根。

三、实验内容

自行编制程:要求利用PL2303实现51单片机串口通信,51单片机发送数据,利用串口调试助手接收并查看数据,串口通信原理图如图7-1所示,PL2003实现串口转USB原理图如图7-2所示。

(1)51单片机发送十六进制“5A”到PC机;

(2)51单片机发送字符串“0123456789”到PC机。

18

图7-1 单片机与PC机串行通信原理图

19

图7-2 串口转USB原理图

四、思考题

1.串行通信中波特率是如何进行设置的? 2.串行通信4种方式有何区别?

3.设计程序实现PC机发送数据,51单片机接收数据,并将接收的数发送至P0口。 实验1程序代码: #include

void main() {

char message=0x5a; TMOD=0X20; TH1=0XFD; TL1=0XFD; TR1=1; REN=1; SM0=0; SM1=1;

EA=1; ES=1; while(1) {

SBUF=message;

20


单片机程序案例(全部调试通过_部分附仿真图)(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:531知识竞赛题库(判断)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: