南昌大学2014年单片机实验报告 下载本文

实验三 定时/计数器实验

一、实验目的

学习MCS-51 内部计数器的使用和编程方法。

二、实验内容

使用MCS-51 内部定时/计数器,定时一秒钟,CPU 运用定时中断方式,实现每一秒钟输出状态发生一次反转,即发光管每隔一秒钟亮一次。

三、实验要求

根据实验内容编写一个程序,并在实验仪上调试和验证。

四、实验步骤

1)系统各跳线器处在初始设置状态,用导线连接CPU 模块P10 到八位逻辑电平显示模块的L0。

2)启动PC 机,打开THGMW-51 软件,输入源程序,并编译源程序。编译无误后,下载程序运行。

3)运行程序观察发光二极管隔一秒点亮一次,点亮时间为一秒。

五、实验参考程序

;//************************************************* ;文件名: TIMER FOR MCU51

;功能: 定时/计数器实验

;接线: 导线连接CPU模块P10到八位逻辑电平显示模块的L0. ;//************************************************* TICK EQU 10000 ; 10000 X 100US = 1S

T100US EQU 156 ; 100US时间常数(6M)

C100US EQU 30H ; 100US记数单元 LEDBUF BIT 20H ORG 0 LJMP START ORG 000BH T0INT:

PUSH PSW

MOV A, C100US+1 JNZ GOON DEC C100US GOON:

DEC C100US+1

MOV A, C100US ORL A, C100US+1

JNZ EXIT ; 100US 记数器不为0, 返回 MOV C100US, #27H ; #HIGH(TICK)

MOV C100US+1, #10H ; #LOW(TICK)

CPL LEDBUF ; 100US 记数器为0, 重置记数器 ; 取反LED EXIT:

POP PSW RETI START:

MOV TMOD, #02H ; 方式2, 定时器 MOV TH0, #T100US

MOV TL0, #T100US

MOV IE, #10000010B ; EA=1, IT0 = 1 SETB TR0 ; 开始定时 CLR LEDBUF CLR P1.0

MOV C100US, #27H ;#HIGH(TICK) MOV C100US+1, #10H ;#LOW(TICK) LOOP:

MOV C, LEDBUF MOV P1.0, C LJMP LOOP END

六、实验结果

运行程序之后,B5区的发光二极管L0隔一秒点亮一次,每次点亮时间为一秒。

七、结果分析

本实验通过定时器0的方式2实现精确定时,但定时器的最长定时时间达不到一秒,所以通过一个时间变量实现,总的定时时间等于定时器定时时间乘以时间变量初值,这样就可实现一秒的定时,程序通过扫描不断检测时间变量的值,当定时时间一秒到时,对P1.0的状态取反,实现L0每隔一秒亮一次。

实验四 交通灯控制实验

一、实验目的

掌握十字路口交通灯控制方法。

二、实验内容

利用系统提供的双色LED 显示电路,和四位静态数码管显示电路模拟十字路口交通信号灯。4 位LED 数码管显示时间,LED 显示红绿灯状态。

三、实验要求

根据实验内容编写一个程序,并在实验仪上调试和验证。

四、实验步骤

1)系统各跳线器处在初始设置状态。P10 同时接G1、G3;P11 同时接R1、R3;P1.2 同时接G2、G4;P1.3 同时接R2、R4;P1.6、P1.7 分别接静态数码显示的DIN、CLK。 2)启动PC 机,打开THGMW-51 软件,输入源程序,并编译源程序。编译无误后,下载程序运行。

3)观察十字路口交通灯效果。

五、实验参考程序

;//******************************************************************* ;文件名:交通灯程序 FOR MCU51

;功能:双色LED模拟交通灯信号,并通过调用静态数码显示状态时间。

;接线:P1.0同时接G1、G3,P1.1接R1、R3,P1.2接G2、G4,P1.3同时接R2、R4, ;P1.6、P1.7接静态数码显示的DIN、CLK。

;//******************************************************************* SECOND1 EQU 30H ;东西秒寄存器 SECOND2 EQU 31H ;南北秒寄存器 DBUF EQU 40H ;显示缓冲1 TEMP EQU 44H ;显示缓冲2 LED_G1 BIT P1.0 ;东西绿灯 LED_R1 BIT P1.1 ;东西红灯 LED_G2 BIT P1.2 ;南北绿灯 LED_R2 BIT P1.3 ;南北红灯

DIN BIT P1.6 ;串行显示数据 CLK BIT P1.7 ;串行显示时钟 ORG 0000H LJMP START

ORG 0100H

START:

LCALL STATE0 ;调用状态0 LCALL DELAY ;调用延时 MOV TMOD,#01H ;置T0工作方式1 MOV TH0, #3CH ;置T0定时初值50MS MOV TL0, #0B0H

SETB TR0 ;启动T0 CLR EA

LOOP: MOV R2,#20 ; MOV R3,#20 ; MOV SECOND1,#25 ; MOV SECOND2,#25 ; LCALL DISPLAY

LCALL STATE1 ;WAIT1: JNB TF0,WAIT1 ; CLR TF0

MOV TH0, #3CH ; MOV TL0, #0B0H

SETB TR0 ; DJNZ R2,WAIT1 ; MOV R2,#20 ; DEC SECOND1 ; DEC SECOND2 ; LCALL DISPLAY

DJNZ R3,WAIT1 ; MOV R2,#5 ; MOV R3,#3 ; MOV R4,#4 ; MOV SECOND1,#5 ; MOV SECOND2,#5 ; LCALL DISPLAY

WAIT2: LCALL STATE2 ; JNB TF0,WAIT2 ; CLR TF0

MOV TH0, #3CH ; MOV TL0, #0B0H

DJNZ R4,WAIT2 ; CPL LED_G1 ; MOV R4,#4 ; DJNZ R2,WAIT2 ; MOV R2,#5 ; DEC SECOND1 ; DEC SECOND2 ;置1S计数初值 50MS*20=1S 红灯20S

东西秒显示初值25S 南北秒显示初值25S 调用状态1 查询50MS到否 恢复T0定时初值50MS 启动T0

判1S到否?未到继续状态1

置50MS计数初值 东西秒显示减一 南北秒显示减一 状态1维持20S

置50MS计数初值 5*4=20 绿灯闪3S

闪烁间隔200MS 东西秒显示初值5S 南北秒显示初值5S 调用状态2 查询50MS到否 恢复T0定时初值50MS 判200MS到否?未到继续状态2 东西绿灯闪

闪烁间隔200MS

判1S到否?未到继续状态2 置50MS计数初值 东西秒显示减一 南北秒显示减一