单片机报告2

更新时间:2024-03-27 01:51:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验二 功能模块(定时/计数器,中断,串口) 一. 定时/计数器

1)定时器

AT89C51单片机的实验电路如图所示,P1.0口接一个发光二极管,编写程序,控制发光二极管闪烁,时间间隔1s,要求采用AT89C51单片机的内部定时器计时,用中断方式,采用工作方式2。

程序设计要求:

设置内部计数器用作定时器, 是对机器周期数计数。每个机器周期的长度是12个振荡器振荡周期。单片机晶振用12MHz,工作方式2,即8位自动重装方式定时器,定时100微秒中断一次,通过计算,得到定时常数=156,然后对100微秒中断次数计数10000次,就是1s。

汇编语言源程序: ORG 00H

TICK EQU 10000 T100us EQU 256-100 C100us EQU 30H LEDBUF EQU 40H LED BIT P1.0

LJMP START ;跳至主程序

ORG 001BH ;中断服务子程序起始地址 TOINT:PUSH PSW

MOV A,C100us+1 JNZ GOON DEC C100us GOON: DEC C100us+1 MOV A,C100us ORL A,C100us+1 JNZ EXIT

MOV C100us ,#HIGH(TICK) MOV C100us+1,#LOW(TICK) CPL LEDBUF EXIT: POP PSW

RETI ;中断返回

START:MOV TMOD,#20H ;方式2,定时器 MOV TH1,#9CH ;置定时器初值 MOV TL1,#9CH

MOV IE,#88H ;开中断 SETB TR1 ;开始定时 CLR LEDBUF CLR LED

MOV C100us ,#HIGH(TICK) MOV C100us+1,#LOW(TICK) LOOP: MOV C,LEDBUF MOV LED,C LJMP LOOP END

2)计数器

从AT89C51单片机的P3.4口输入外部时钟,编写程序,对外部脉冲个数进行计数,并将计数值用8位发光二极管以二进制数显示出来。 程序设计要求:

AT89C51内部定时/计数器用作计数器,外部时间计数脉冲由P3.4引入定时器T0,单片机在每个机器周期采样一次T0引脚的输入波形,如果有跳变,则计数值自动加1。

汇编语言源程序: ORG 0000H MOV TMOD,#00000101B ;置T0计数器方式1 MOV TH0,#0 ;置T0初值 MOV TL0,#0 SETB TR0 ;T0运行 LOOP: MOV P1,TL0 ;记录P1口脉冲个数 LJMP LOOP ;返回 END

本文来源:https://www.bwwdw.com/article/di9r.html

Top