电脑桌面
添加蜗牛文库到电脑桌面
安装后可以在桌面快捷访问

(第1章) 单片机教案

栏目:合同范文发布:2025-01-28浏览:1收藏

(第1章) 单片机教案

第一篇:(第1章) 单片机教案

§1概论

§1.1 单片机特点及发展概况

一、什么是单片机

二、单片机的特点

三、单片机的应用

四、单片机的发展概况

§1.2 常用8位单片机系列介绍

一、Zilog公司Z8系列单片机

二、Motorola公司M6800系列单片机

三、51系列单片机

a)Intel公司MCS51、96系列单片机 b)Atmel公司AT89C51系列单片机

本课程主要内容:以编程应用为中心学习单片机 学习特点:软件为主,硬件为辅;

围绕软件,了解硬件; 软硬结合,解决问题

§2 51系列单片机 结构及工作原理

§2.1 51系列单片机整机结构

一、内部结构

CPU、RAM、ROM、I/O接口、CTC

二、外部引脚

从内部了解51系列单片机,为编程服务 从外部认识51系列单片机,为接线服务

了解CPU控制器的4个组成部分: 1 程序计数器PC:Program Counter 2 数据指针DPTR:Data Pointer 3 指令译码器 4 指令寄存器

了解运算器的组成,认识累加器ACC 明确51系列单片机一般组成: CPU、(ROM)、256B RAM、2×16位CTC、5个中断源、4 ×8位并行I/O 接口、1个全双工串行接口

MCS8031单片机:无ROM型,需要外接ROM或EPROM作

程序存贮器

这里ROM是广义的程序存贮器,既包括真正的ROM:Read Only Memory,又包括EPROM:Erasable Programmable Read Only

Memory,还包括最新的闪存FPEROM:Flash Programmable and Erasable Read Only Memory,优盘的核心 MCS8031单片机:无ROM,不是真正的单片机 MCS8051单片机:4K ROM MCS8751单片机:4K EPROM AT89C51单片机:4K FPEROM,以及AT89S51 AT89C2051单片机:2K FPEROM,2×8位并行I/O 接口,20脚,以及AT89S2051

重点掌握PC、DPTR、PSW、ACC 了解指令译码器、指令寄存器、算术逻辑单元ALU(Arithmetic Logic Unit)

PC:16 bit Program Counter, 16位程序计数器,功能:为CPU提供程序存贮器的地址。

特点:程序执行时自动加1计数:加1、2或3; 程序跳转时赋入新数:直接赋值。DPTR:16 bit Data Pointer, 16位数据指针

功能:寻址

特点:可用指令MOV DPTR,#DATA16整体赋值; 可用INC DPTR指令加1。PSW: Program State Word 功能:指示指令执行后各部状态

特点:指令执行后自然影响,或由指令直接赋值 ACC: Accumulator 功能:存贮指令执行前的已知数据; 存贮指令执行后的中间结果。

§2.2 51系列单片机存贮器结构

一、存贮器划分方法

二、程序存贮器

三、数据存贮器

四、内部RAM的分区

五、堆栈Stack及堆栈指针Stack Pointer

建立特殊功能寄存器SFR:Special Function Register, 栈Stack、字节寻址、位寻址等概念 了解51系列单片机存贮器划分

了解程序存贮器的组成及其特殊单元的定义

7FHFFHF0H寄存器BE0H累加器A用户RAM区D0H程序状态字PSW堆栈、数据暂存等B8H中断优先级控制字IPB0H并行I/O口P3A8H中断控制字A0H并行I/O口P230H99H串行口缓冲器2FH98H串行口控制字可位寻址区90H并行I/O口P18DH定时器T1的高8位位地址00H~7FH8CH定时器T0的高8位20H8BH定时器T1的低8位1FHR78AH位18H3组工作寄存器区定时器T0的低8R089H定时器组合模式控制字17HR72组工作寄存器区88H定时器工作方式控制字10HR087H电源控制字0FHR783H位08H1组工作寄存器区数据指针高8R082H数据指针低8位07HR700HR00组工作寄存器区81H堆栈指针80H并行I/O口P0

图1 RAM的分区、SFR及堆栈

堆认识RAM的分区、SFR及堆栈

明确51系列单片机存贮器从物理上分为4个空间: 内部RAM、内部ROM、外部RAM、外部ROM 从逻辑上分为3个空间:内RAM,外RAM,内ROM和外ROM 明确51系列单片机一般组成:CPU、(ROM)、256B RAM、2×16位CTC、5个中断源、4×8位并行I/O 接口、1个全双工串行接口

程序存贮器特殊单元:0000H:主程序入口;

0003H:0号外部中断服务子程序入口;

000BH:0号CTC中断服务子程序入口; 0013H:1号外部中断服务子程序入口; 001BH:1号CTC中断服务子程序入口; 0023H:串行口中断服务子程序入口。

明确程序存贮器起始单元中只有0000H单元的用途主程序入口是硬性规定,其余都是弹性规定。此处弹性规定的含义是:没有相应的中断服务子程序时,该地址可以灵活运用。

明确位寻址区有两种寻址方法可用:字节(整体)寻址和按位独立寻址

知道堆栈先进后出的特点及应用 知道内部RAM的分区

作业: AT89C51单片机片内包含那些主要逻辑功能部件。2 51系列单片机的EA端子有何用途。3 简答51系列单片机存贮器的4个物理空间和3个逻辑空间,如何访问不同的存贮空间。简述51系列单片机片内RAM的空间分配。

§2.3 51系列单片机并行I/O端口结构

一、P1口结构及功能

Ucc5V内部读锁存器信号缓冲器50k内部DBDQ锁存器MOS电子开关内部写信号CPQT1P1.XX0~7缓冲器内部读引脚信号P1口线内部结构图2

功能:准双向I/O口

作输入之前要先输出1,断开下拉电子开关

有读锁存器功能,可防止误读

拉电流能力:<0.1mA 灌电流能力:<10mA

二、P2口结构及功能 功能:准双向I/O口

作输入之前要先输出1,断开下拉电子开关

有读锁存器功能,可防止误读

拉电流能力:<0.1mA 灌电流能力:<10mA 第二功能:高8位地址线A15~8

内部读锁存器信号缓冲器内部控制信号内部地址信号Ucc5V50k内部DBDQ锁存器单刀双掷电子开关内部写信号MOS电子开关T1反相器P2.XX0~7CPQ缓冲器内部读引脚信号P2口线内部结构

图3

三、P3口结构及功能

功能:准双向I/O口

作输入之前要先输出1,断开下拉电子开关

有读锁存器功能,可防止误读

拉电流能力:<0.1mA 灌电流能力:<10mA 第二功能:串行口等

Ucc5V内部读锁存器信号缓冲器第二输出功能50k内部DBDQ锁存器内部写信号MOS电子开关T1P3.XX0~7CPQ缓冲器与非门内部读引脚信号第二输入功能P3口线内部结构

图4

四、P0口结构及功能

功能:1.准双向I/O口 2.数据总线

3.低8位地址总线A7~0

内部读锁存器信号缓冲器地址/数据控制Ucc5V与门T1内部DBDQMOS电子开关T2锁存器P0.XX0~7内部写信号CPQ单刀双掷电子开关缓冲器内部读引脚信号控制0:与门被封锁,电子开关下掷,T1截止,作开漏口线控制1:与门敞开,电子开关上掷,作地址/数据线P0口线内部结构图5

明确某口线作输入之前要先输出1—准双向含义 知道P0、P2、P3口线的第二功能

明确P1、P2、P3口线内部有约50k的上拉电阻

知道NMOS电子开关的特性:栅极接受高电平时导通; 接受低电平时断开。

§2.4 51系列单片机时序和复位

一、晶振频率fosc

fosc6MHz,11.0592

S1MHz,12MHz

S4S5S6S2S3foscP1P251系列单片机振荡频率及时钟频率发生器石英晶体C2二分频器振荡器C1

图6

二、时钟频率P、时钟周期(状态周期)

fP1fP20.5fosc,fP1与fP2错开180。时钟频率的倒数称为时钟周期,也叫。

三、机器周期

六个状态周期组成一个。

四、指令周期

机器周期是指令周期的基本单位。

就是说,1个指令周期最少包括1个机器周期。

按照包括机器周期的个数,实际指令周期分为单周期、1,P2双周期和四周期共三种。

总结

建立晶振频率、时钟频率、时钟周期、机器周期、指令周期等概念

知道晶振频率二分频为两相时钟频率; 知道一个机器周期包括两个时钟周期;

知道一个指令周期包括1个、2个或4个机器周期; 知道51系列单片机使用了指令交叉执行技术,即在当前指令尚未执行完毕前已经开始下一条指令的取指操作。所以51系列单片机很多指令长度为双字节,但执行时间为单周期。大大提高了工作速度。

§2.5 51系列单片机的复位

一、复位要求

给Reset引脚一个脉宽不小于2个机周的正脉冲 例:晶振频率fosc=12MHz时,机器周期T1s,则要求加在Reset引脚的脉宽不小于2s。

在正脉冲期间,单片机完成复位任务,使有关的寄存器、计数器等成为特定状态。

正脉冲结束时,单片机开始执行程序。Button5VR11kC1F9AT89C51ResetR10kUR5V2Vot1t

图7 复位电路

二、复位方法

uc(0)0 uc()5V

按照三要素法

uc(t)uc()[uc(0)uc()]et/

代入uc(0)0和uc()5V有

uc(t)5(1et/)V

电阻R上的电压即AT89C51单片机Reset引线的输入电压为

uR(t)5Vuc(t)5et/V

在刚上电时,uR(t)5V。随着时间进行,uR(t)要按照负指数曲线下降。当下降到uR(t1)2V时,高电平变为低电平,单片机开始执行程序。t1就是有效复位时间。令 uR(t1)5et/1t/1V2V

由此求出

e2.5

t1ln2.5

例:晶振频率fosc=12MHz时,机器周期T在Reset引脚的脉宽t12s,则有

21061s,要求加s

若电阻RC210101010k,则可求出电容值

6321010F200pF

为保险起见,通常取电容C=1F。

电阻R2以电容放电不过快为宜,通常取R11k。

三、复位影响

除SBUF以外的20个SFR

四、复位结果

P0~P3口全1,SP=07H,其余有效位全0。

五、上电复位与带电复位的比较

上电复位后内部RAM数值不定 带电复位后内部RAM数值不变

复位要求:给Reset引脚一个脉宽不小于2个机周的正脉冲

复位方法:上电复位: RC自然充电

带电复位: 手压按钮强迫电容放电,松开后再次自然充电

复位影响:除SBUF以外的20个SFR 复位结果:大部为0,小部为1 上电复位与带电复位的比较:

上电复位后内部RAM数值不定 带电复位后内部RAM数值不变

作业: 9 12 13 14

第二篇:2013单片机实验教案

单片机技术实验

杰 实验一(1)顺序结构程序设计

一、实验目的

掌握汇编语言设计和调试方法。

二、实验内容

把外部RAM中2000h单元的内容拆开,高位送2001h单元,低位送2002h单元,2001h、2002h高位清零,一般本程序用于把数据送显示缓冲区时用。

三、程序流程

四、实验步骤

1、LED环境

⑴在“P.”状态下按“0→EV/UN”,装载实验所需的代码程序。

⑵在“P.”状态下键入0000,然后按“STEP”或“EXEC”进入实验项目的调试与运行。

2、PC环境

在与PC联机状态下,编译、连接、下载PH51se02.asm,用连续或单步方式运行程序。

3、运行结果检查

⑴在单步运行时每走一步可观察其运行结果。

⑵在连续运行状态下,应按“暂停图标”或实验箱上的“暂停按钮”,使系统无条件退出用户运行状态返回监控,然后再用相应的命令键观察与检查2000~2002h中内容变化情况。

五、思考

如何用断点方式调试本程序。

ORG 0000H LJMP START

ORG 0030H START: MOV DPTR,#2000H

MOVX A,@DPTR ANL A,#0F0H SWAP A MOV DPTR,#2001H MOVX @DPTR,A

MOV DPTR ,#2000H MOVX A,@DPTR ANL A,0FH MOV DPTR,#2002H MOVX @DPTR,A SJMP $ END 实验一(2)循环结构程序设计

一、实验目的

熟悉MCS-51指令系统,掌握程序设计方法。

二、实验内容

编写并调试一个排序子程序,其功能为用冒泡法将内容RAM中几个单元字节无符号的正整数,按从小到大的次序重新排列。

三、程序框图

四、实验步骤

1、LED环境

⑴在“P.”状态下按“0→EV/UN”,装载实验所需的代码程序。

⑵对片内RAM地址50h~5AH进行不规则置数。

⑶在“P.”状态下键入0000,然后按“STEP”或“EXEC”进入实验项目的调试与运行。

2、PC环境

在与PC联机状态下,编译、连接、下载PH51se05.asm,用连续或单步方式运行程序。

3、运行结果检查

⑴在单步运行时每走一步可观察其运行结果。

⑵在连续运行状态下,应按“暂停图标”或实验箱上的“暂停按钮”,使系统无条件退出用户运行状态返回监控,然后再用相应的命令键观察与检查片内50~5Ah中内容是否按从 小到大排列。

五、思考:修改程序把50~5Ah中内容按从小到大排列。

ORG 0000H LJMP START ORG 0030H MOV R7,#09H MOV R6,#00H;清除标志 CLR C MOV A,@R0 INC R0 SUBB A,@R0 JC LOOP1 MOV R6,#01H DEC R0 MOV A,@R0 INC R0 XCH A,@R0 MOV @R0,A DJNZ R7,START1 CJNE R6,#00H,START SJMP $ END START:

MOV R0,#50H START1:

DEC R0

INC R0 LOOP1:

实验一(3)选择结构程序设计

一、实验目的

掌握汇编语言的编程。

二、实验内容

编写程序,根据送入的数据转移运行。

三、程序框图

四、实验步骤

1、LED环境

⑴在“P.”状态下按“0→EV/UN”,装载实验所需的代码程序。⑵在20H中分次送入00、01、02、03。

⑶在“P.”状态下键入0A10,然后按“STEP”或“EXEC”进入实验项目的调试与运行。

2、PC环境

在与PC联机状态下,编译、连接、下载PH51se08.asm,用连续或单步方式运行程序。

3、运行结果检查

(1)在单步运行时每走一步可观察其运行结果。

(2)在连续运行状态下,应按“暂停图标”或实验箱上的“暂停按钮”,使系统无条件退出用户运行状态返回监控,然后观察每次运行程序后,数码管上数字循环情况。

ORG 0000H

LJMP START

ORG 0030H START: MOV 20H,#00H MOV A,20H MOV B,#03H

MUL AB

MOV DPTR,#TAB

JMP @A+DPTR

SJMP $ ORG 3000H TAB:

LJMP LOOPA

LJMP LOOPB

LJMP LOOPC

LOOPA: MOV A,#01H LOOPA1: MOV P1,A

LCALL DELAY1S

RL A

LJMP LOOPA1

LOOPB: MOV A,#03H LOOPB1: MOV P1,A

LCALL DELAY1S

RL A

LJMP LOOPB1

LOOPC: MOV A,#05H LOOPC1: MOV P1,A

LCALL DELAY1S

RL A

LJMP LOOPC1

DELAY1S: DELAY1S3: DELAY1S2: DELAY1S1:

MOV R7,#10 MOV R6,#200 MOV R5,#250 DJNZ R5,DELAY1S1 DJNZ R6,DELAY1S2 DJNZ R7,DELAY1S3 RET END

实验二 中断实验

一、实验目的

熟悉单片机中断概念及中断编程方法。

二、实验内容

编写程序,从P3.3输入脉冲,记录输入脉冲个数,并用P1口外部链接的发光二极管显示技术结果。

二、参考程序

ORG 0000H

LJMP START

ORG 0013H

LJMP INT1_COUNT

ORG 0030H START:

MOV SP,#60H

MOV A,#00H

SETB IT1;下降边沿触发方式

SETB EX1;开启INT1中断

SETB EA

SJMP $ INT1_COUNT:

INC A

MOV P1,A

RETI

END

实验三 LED显示实验

一、实验要求

利用实验系统提供的显示设备,动态显示一行数据。

二、实验目的

⑴了解数码管动态显示的原理; ⑵了解用总线方式控制数码管显示。

三、实验说明

本实验系统提供了8位七段码LED显示电路,学生只要按地址输出相应数据,就可以实现对显示器的控制。

四、程序框图

ORG 0000H LJMP START ORG 0030H START: MOV SP,#60H MOV 50H,#8CH;显示字符P.MOV 51H,#40H MOV 52H,#79H MOV 53H,#24H MOV 54H,#30H MOV 55H,#19H MOV 56H,#12H MOV 57H,#02H

LOOP1: LCALL DISPLAY

LJMP LOOP1

DISPLAY: MOV P2,#0FH MOV P0,50H LCALL DELAY20MS

MOV P2,#1FH MOV P0,51H LCALL DELAY20MS

MOV P2,#2FH MOV P0,52H LCALL DELAY20MS MOV P2,#3FH MOV P0,53H LCALL DELAY20MS

MOV P2,#4FH MOV P0,54H LCALL DELAY20MS

MOV P2,#5FH MOV P0,55H LCALL DELAY20MS

MOV P2,#6FH MOV P0,56H LCALL DELAY20MS

MOV P2,#7FH MOV P0,57H LCALL DELAY20MS

LJMP DISPLAY

DELAY20MS: MOV R7,#20 DELAY1: MOV R6,#100 DELAY2: DJNZ R6,DELAY2 DJNZ R7,DELAY1 RET

TAB: DB 40H,79H,24H,30H,19H,12H,02H;0 1 2 3 4 5 6 DB 78H,00H,10H,08H,03H,46H,21H,06H,0EH;7 8 9 A B C D E F的字符码

TAB1: DB 8CH;P.TAB2: DB 7FH;END 的字符码的字符码

空,不显示的字符

键盘电路实验

电路图:

程序:

;用int1中断实现按键功能,键值存放在4fh单元中;通过P1口输出按键值,用发光二极管显示按键值;通过P2.4--P2.6和三八译码器输出八列按键扫描码;通过P2.0---P2.3读入按键的行值;行列值组合,就是按键的键值 ORG 0000H LJMP START ORG 0013H LJMP key_value ORG 0030H START: MOV 4fH,#00h;存放按键键值单元 MOV P1,#00H MOV P2,#0FFH setb ex1 setb it1 setb ea KEY_SCAN: MOV P2,#0FH LCALL DELAY5MS

MOV P2,#1FH LCALL DELAY5MS

MOV P2,#2FH LCALL DELAY5MS

MOV P2,#3FH LCALL DELAY5MS

MOV P2,#4FH LCALL DELAY5MS

MOV P2,#5FH LCALL DELAY5MS

MOV P2,#6FH LCALL DELAY5MS

MOV P2,#7FH LCALL DELAY5MS

LJMP KEY_SCAN

DELAY5MS: MOV R7,#40 DELAY1: MOV R6,#100 DELAY2: DJNZ R6,DELAY2 DJNZ R7,DELAY1 RET

KEY_VALUE: PUSH ACC PUSH PSW MOV A,P2 MOV 4FH,A MOV P1,A POP PSW POP ACC RETI END

LED和键盘综合实验

电路图:

参考程序:

ORG 0000H LJMP START ORG 0013H LJMP KEY_VALUE ORG 0030H START: MOV SP,#60H

MOV 4fH,#00h;存放按键键值单元 MOV P2,#0FFH setb ex1 setb it1 setb ea

MOV 50H,#0CH;显示字符P.MOV 51H,#0CH MOV 52H,#7FH MOV 53H,#7FH MOV 54H,#7FH MOV 55H,#7FH MOV 56H,#7FH MOV 57H,#0CH

LOOP1: LCALL DISPLAY

LJMP LOOP1

DISPLAY: MOV P2,#0FH MOV P0,50H LCALL DELAY20MS

MOV P2,#1FH MOV P0,51H LCALL DELAY20MS

MOV P2,#2FH MOV P0,52H LCALL DELAY20MS

MOV P2,#3FH MOV P0,53H LCALL DELAY20MS

MOV P2,#4FH MOV P0,54H LCALL DELAY20MS

MOV P2,#5FH MOV P0,55H LCALL DELAY20MS

MOV P2,#6FH MOV P0,56H LCALL DELAY20MS

MOV P2,#7FH MOV P0,57H LCALL DELAY20MS

LJMP DISPLAY

DELAY20MS: MOV R7,#20 DELAY1: MOV R6,#100 DELAY2: DJNZ R6,DELAY2 DJNZ R7,DELAY1 RET

KEY_VALUE: PUSH ACC PUSH PSW MOV 4FH,P2 LCALL KEY_VALUE_DISP POP PSW POP ACC RETI

KEY_VALUE_DISP: MOV A,4FH ANL A,#0F0H SWAP A MOV DPTR,#TAB MOVC A,@A+DPTR MOV 56H,A MOV A,4FH ANL A,#0FH MOVC A,@A+DPTR MOV 57H,A RET

TAB: DB 40H,79H,24H,30H,19H,12H,02H;0 1 2 3 4 5 6的字符码 DB 78H,00H,10H,08H,03H,46H,21H,06H,0EH;7 8 9 A B C D E F的字符码

TAB1: DB 8CH;P.的字符码

TAB2: DB 7FH;空,不显示的字符 END

实验四 A/D转换实验

一、实验目的

(1)掌握A/D转换与单片机接口的方法;(2)了解A/D芯片0809转换性能及编程方法;(3)通过实验了解单片机如何进行数据采集。

二、实验内容

利用实验系统上的0809做A/D转换器,实验系统上的电位器提供模拟量输入,编制程序,将模拟量转换成数字,通过数码管显示出来。

三、程序框图

四、实验电路

五、实验步骤

把0809的零通道INT0用插针接至AINl孔,0809CS位FFE0孔,运行程序,数码管显示0809.XX,后二位显示当前采集的电压转换的数字量,调节W1,该二位将随着电压变化而相应变化。

六、思考

修改程序,用其它通道轮流采样显示。

实验五 电脑时钟(定时器、中断综合实验)

一、实验目的

熟悉MCS-51定时器,串行口和中断初始化编程方法,了解定时器的应用实时程序的设计与调试技巧。

二、实验内容

编写程序,从本实验系统键盘上输入时间初值,用定时器产生0.1S定时中断,对时钟计数器计数,并将数值实时地送数码管显示。

三、程序框图

四、实验步骤

连续运行程序,在键盘上输入时间初值,按执行键EXEC执行,数码管上实时显示时间值。

五、思考

(1)电子钟走时精度和程序中那些常数有关?

(2)修改程序使定时器工作方式改变,调节有关参数,进一步提高精度。

六、参考程序

ORG 0000H LJMP START ORG 000BH LJMP T0_INT ORG 0030H START: MOV 50H,#00H;时的低位字符码 MOV 51H,#00H;时的高位字符码 MOV 52H,#00H;“-”的字符码 MOV 53H,#00H;分的低位字符码 MOV 54H,#00H;分的高位字符码 MOV 55H,#00H;“-”的字符码 MOV 56H,#00H;秒的低位字符码 MOV 57H,#00H;秒的高位字符码 MOV 5FH,#00H;存放小时的单元 MOV 5EH,#00H;存放分钟的单元 MOV 5DH,#00H;存放秒的单元 MOV 5CH,#00H;存放T0中断次数,50次为1秒

MOV SP,#60H;设置堆栈栈顶 MOV TH0,#???;设置T0定时器初值 MOV TL0,#??? MOV TMOD,#00000001H;T0工作在定时方式,工作方式0

SETB ET0;开放T0中断 SETB EA;开放总中断 SETB TR0;启动定时器T0 LOOP: mov P2,#11111110H MOV R0,#50H loop1: MOV R7,#08H LOOP2: MOV A,@R0 MOV P1,A LCALL DELAY INC R0 MOV A,P2 RL A

MOV P2,A DJNZ R7, LOOP2 LJMP LOOP SJMP $

DELAY: MOV R6,#2;延时程序 DELAY1: MOV R5,#10 DELAY2: MOV R4,#100 DELAY3: DJNZ R4,DELAY3 DJNZ R5,DELAY2 DJNZ R6,DELAY1 RET 16 T0_INT: CLR TR0 PUSH ACC MOV A,5CH CJNE A,#50H,T0_INT1 MOV 5CH,#00H MOV A,5DH CJNE A,#59H,T0_INT2 MOV 5DH,#00H MOV A,5EH CJNE A,#59H,T0_INT3 MOV 5EH,#00H MOV A,5FH CJNE A,#23H,T0_INT4 MOV 5FH,#00H LJMP T0_END T0_INT1: INC 5CH LJMP T0_END T0_INT2: INC 5DH LJMP T0_END T0_INT3: INC 5EH LJMP T0_END T0_INT4: INC 5FH T0_END: MOV A,5FH

MOV B,#10 DIV AB MOV 51H,A MOV A,B MOV 50H,A MOV A,5EH MOV B,#10 DIV AB MOV 54H,A MOV A,B MOV 53H,A MOV A,5DH MOV B,#10 DIV AB MOV 57H,A MOV A,B MOV 56H,A POP ACC

MOV TH0,#??? MOV TL0,#??? SETB TR0 RETI

实验六 LCD液晶显示屏实验

一、实验目的

⑴掌握单片机扩展液晶显示接口的设计与编程。⑵利用字符式液晶显示器显示字符。

二、实验内容

编制程序,在液晶显示器上显示:

学生所在的院系的汉语拼音字母和学生的名字。分两行显示。

三、实验电路

四、参考程序

DAT1 DAT2 EQU EQU 30H;第一参数单元 31H;第二参数单元 32H;指令代码单元 0100H;指令通道地址 0000H;数据通道地址 COM EQU C_ADD EQU D_ADD EQU

org 0000h ljmp main org 0030h;主程序

MAIN: MOV SP,#60H;

lcall delay;上电延时

LCALL INT;初始化

LCALL CLEAR;清缓冲区 TEST: LCALL hgnu_disp;显示“WELCOM TO HGNU” LCALL PL_XW_ZKB;显示 “P_L :”

“X_W :”

“ZKB:” sjmp test

;上电延时子程序 delay: MOV R6,#50H;MOV R7,#00H;DELY1: NOP DJNZ R7,DELY1;上电延时

DJNZ R6,DELY1;ret;读状态字子程序

R_ST: MOV DPTR,#C_ADD;设置指令通道 MOVX A,@DPTR;RET;判断状态位STA1,STA0子程序(读写指令和数据),在指令的读,写

;数据之前这两个标志必须同时为“1” ST01: LCALL R_ST;JNB ACC.0,ST01;JNB ACC.1,ST01;RET;判断状位STA2子程序(数据自动读状态),该位

;在数据自动操作过程中取代STA0和STA1有效。在连续读过程中每读一次;之前都要确认STA2=1 ST2: LCALL R_ST;JNB ACC.2,ST2;RET;判断STA3子程序(数据自动写状态)ST3: LCALL R_ST;JNB ACC.3,ST3;RET;判断状态位STA6子程序(屏读/屏拷贝状态)ST6: LCALL R_ST;JB ACC.6,ERR;RET ERR: LJMP ST6;;出错处理

;写指令和写数据子程序..;双字节参数指令写入入口

PR1: LCALL ST01;判断状态位STA1,STA0 MOV A,DAT1;取第一参数单元数据

LCALL PR13;写入参数;单字节参数指令写入入口

PR11: LCALL ST01;判断状态位STA1,STA0 MOV A,DAT2;取第二参数单元数据 LCALL PR13;写入参数

;无参数指令写入入口

PR12: LCALL ST01;无参数指令写入入口

MOV A,COM;取指令代码单元数据

MOV DPTR,#c_ADD;设置指令通道地址/数据写入入口

LJMP PR14;写入指令代码

PR13: MOV DPTR,#D_ADD;设置数据通道地址/数据写入入口 PR14: MOVX @DPTR,A;写入操作 RET;读数据子程序 PR2: LCALL ST01;判断状态位

MOV DPTR,#D_ADD;设置数据通道地址

MOVX A,@DPTR;读数据操作 MOV DAT2,A;数据存入第二参数/数据单元

RET;初始化子程序

INT:

;显示区域设置

MOV DAT1,#00H;设置文本显示区首地址

MOV DAT2,#00h;MOV COM,#40H;LCALL PR1;双字节参数指令写入入口

MOV DAT1,#16;设置文本显示区域宽度

MOV DAT2,#00H;即一行显示所占字节数

MOV COM,#41H;LCALL PR1;双字节参数指令写入入口

MOV DAT1,#00H;设置显示区域首地址

MOV DAT2,#00H;或文本属性区域首地址

MOV COM,#42H;LCALL PR1;双字节参数指令写入入口

MOV DAT1,#10H;设置图形显示区域宽度

MOV DAT2,#00H;或为文本属性区域狂宽度

MOV COM,#43H;即一行显示所占字节数

LCALL PR1;双字节参数指令写入入口

;显示光标设置

MOV COM,#0A1H;光标形状设置

LCALL PR12;

;设置光标初始位置,是字符行和字符列,第0行第15列

MOV DAT1,#0;光标行位置

MOV DAT2,#0;光标列位置

MOV COM,#21H;LCALL PR1;双字节参数指令写入入口

;显示方式设置,使用内部字符发生器

MOV COM,#80H;显示方式设置,逻辑“或”合成 LCALL PR12;无参数指令写入入口+

MOV COM,#97H;仅用文本显示

LCALL PR12;无参数指令写入入口

;显示开关方式

RET

;写数据子程序,8*8点阵

;R6中装入显示位置的列数(字符的个数),每行16个字符,R7中装入显示位置距左上角的字符行数

;5FH单元中装入待显示的字符码 DISP: mov b,r7

mov a,#16 mul ab mov r7,a CLR C mov a,R6

ADD A,R7 MOV R6,A;R7*16+R6

MOV DAT1,R6;设置显示RAM首地址,水平方向字符数

MOV DAT2,#00H;固定送00H MOV COM,#24H;地址指针指令

LCALL PR1;MOV

dat2,5fH;取要显示的字符

MOV COM,#0c4H;数据写,地址不变 LCALL PR11;写入数据

RET;清显示缓冲区(16*8单元)clear: MOV 5FH,#00H

MOV R5,#0 CLEAR0: MOV R4,#0 CLEAR1: MOV A,R5

MOV R7,A MOV A,R4 MOV R6,A CLEAR2: LCALL DISP

INC R4 CJNE R4,#16,CLEAR1

mov r4,#00h

INC R5

CJNE R5,#8,CLEAR0 CLEAR9: RET;显示频率、相位、占空比、相位差等字符。(P_L :;PL_XW_ZKB:MOV R7,#3 MOV R6,#0 MOV

5fh,#30H;“P” LCALL DISP MOV R7,#3 MOV R6,#1 MOV

5fh,#3FH;“_” LCALL DISP MOV R7,#3 MOV R6,#2 MOV

5fh,#2CH;“L”

X_W :

ZKB:)

LCALL DISP MOV R7,#3 MOV R6,#3 MOV

5fh,#1AH;“: ” LCALL DISP MOV R6,#0 MOV

5fh,#38H;“X” LCALL DISP MOV R7,#5 MOV R6,#1 MOV

5fh,#3FH;“_” LCALL DISP MOV R7,#5 MOV R6,#2 MOV

5fh,#37H;“W” LCALL DISP MOV R7,#5 MOV R6,#3 MOV

5fh,#1AH;“: ” LCALL DISP

MOV R7,#5

MOV R7,#7 MOV R6,#0 MOV

5fh,#3AH;“Z” LCALL DISP

MOV R7,#7 MOV R6,#1 MOV

5fh,#2BH;“K” LCALL DISP MOV R7,#7 MOV R6,#2 MOV

5fh,#22H;“B ” LCALL DISP MOV R7,#7 MOV R6,#3 MOV

5fh,#1AH;“: ” LCALL DISP RET;顶行显示“黄冈师院物科院“的英文名称。;”welcome to hgnu!“ hgnu_DISP:

MOV R7,#0;显示位置的行列数

MOV R6,#0 MOV

5fh,#37H;”W“ LCALL DISP MOV R7,#0 MOV R6,#1 MOV

5fh,#25H;”E“ LCALL DISP MOV R7,#0 MOV R6,#2 MOV

5fh,#2CH;”L“ LCALL DISP MOV R7,#0 MOV R6,#3 MOV

5fh,#23H;”C“ LCALL DISP MOV R7,#0 MOV R6,#4 MOV

5fh,#2FH;”0“ LCALL DISP MOV R7,#0 MOV R6,#5 MOV

5fh,#2DH;”M“ LCALL DISP MOV R7,#0 MOV R6,#6 MOV

5fh,#25H;”E“ LCALL DISP MOV R7,#0 MOV R6,#7 MOV

5fh,#00H;” “ LCALL DISP MOV R7,#0 MOV R6,#8 MOV

5fh,#34H;”T“ LCALL DISP MOV R7,#0 MOV R6,#9 MOV

5fh,#2FH;”O“ LCALL DISP MOV R7,#0 MOV R6,#10 MOV

5fh,#00H;” “ LCALL DISP MOV R7,#0 MOV R6,#11 MOV

5fh,#28H;”H“ LCALL DISP

MOV R7,#0 MOV R6,#12 MOV

5fh,#27H;”G“ LCALL DISP MOV R7,#0 MOV R6,#13 MOV

5fh,#2EH;”N“ LCALL DISP MOV R7,#0 MOV R6,#14 MOV

5fh,#35H;”U“ LCALL DISP RET tab: db 10h,11h,12h,13h,14h,15h,16h,17h,18h,19h;”0-----9“

db 21h,22h,23h,24h,25h,26h;”A-----F" end

实验七 直流电机转速测量与控制实验

一、实验目的

1.掌握直流电机的驱动原理。2.了解直流电机调速的方法。

二、实验内容

1.用0832 D/A转换电路后的输出经放大后驱动直流电机。

2.编制程序改变0832输出经放大后的方波信号的占空比来控制电机转速。本实验中 D/A输出为双极性输出,因此电机可以正反向旋转。

三、程序流程

三、实验电路

五、参考程序

DATA_TH0 EQU 00H DATA_TL0 EQU 00H;信号周期为130ms DATA_TH1 EQU 20H DATA_TL1 EQU 00H;高电平时间65ms ORG 0000H LJMP MAIN ORG 0003H LJMP INT_0;启动电机按键

ORG 000BH LJMP T_0;T0确定输出信号的周期(或者频率)ORG 0013H LJMP INT_1;电机转动方向控制按键 ORG 001BH LJMP T_1;T1确定输出信号高电平的时间期

ORG 0030H MAIN: MOV SP,#60H

CLR P1.0 CLR P1.1;关闭电机

setb 20h.0;初始化电机正转

clr 20h.1;初始状态时,电机停止转动 MOV TMOD,#11H SETB IT0 SETB EX0 SETB IT1 SETB EX1 SETB ET0 SETB ET1 SETB EA

SJMP $

T_0: JNB 20H.1,T_01;

MOV TH1,#DATA_TH1

MOV TL1,#DATA_TL1 SETB TR1

MOV TH0,#DATA_TH0 MOV TL0,#DATA_TL0 SETB TR0 JNB 20H.0,T_02 setb P1.0 clr P1.1 LJMP T_05 T_02: clr P1.0 setb P1.1 LJMP T_05 T_01: CLR P1.0

CLR P1.1 CLR TR0 CLR TR1 RETI CLR TR1 T_05: T_1: clr p1.0 clr p1.1 RETI int_1: CPL 20H.1;电机启动标志求反,开启电机或者关闭电机

JNB 20H.1,INT_11;启动标志不为1,则停止电机,关闭定时器

MOV TH1,#DATA_TH1;启动标志为1,则开启定时器1和定时器2,输出PWM波

MOV TL1,#DATA_TL1 SETB TR1

MOV TH0,#DATA_TH0

MOV TL0,#DATA_TL0 SETB TR0 JNB 20H.0,INT_12;转动方向标志不为1,则反转,否则正转 setb P1.0 clr P1.1 LJMP INT_19 setb P1.1 LJMP INT_19 INT_12: clr P1.0 INT_11: CLR P1.0 CLR P1.1 CLR TR0 CLR TR1 INT_19: RETI 26

INT_0: CPL 20H.0 RETI END

实验八 步进电机控制实验

一、实验目的

1.了解步进电机控制的基本原理。2.掌握步进电机转动编程方法。

二、实验内容

从键盘上输入正、反转命令,转速参数和转动步数显示在显示器上,CPU再读取显示器上显示的正、反转命令,转速级数(16级)和转动步数后执行。转动步数减为零时停止转动。

三、实验电路图

四、参考程序

ORG 0000H

ljmp main ORG 000BH LJMP COUNT0 ORG 001BH LJMP COUNT1 ORG 0100H MAIN: MOV P0,#0FFH;输送脉冲口,SETB P1.2;MOV R0,#1;延时变化变量 LOOP1: MOV P0,#0FCH LCALL DELAY MOV P0,#0F6H LCALL DELAY MOV P0,#0F3H LCALL DELAY MOV P0,#0F9H LCALL DELAY JNB P1.2,LOOP2 MOV TMOD,#01010101B MOV TH0,#0FFH MOV TL0,#0FFH MOV TH1,#0FFH MOV TL1,#0FFH SETB TR0 SETB TR1 SETB ET0 SETB ET1 SETB EA MOV DPTR,#TABLE MOV A,R0 MOVC A,@A+DPTR MOV P2,A JMP LOOP1 LOOP2: MOV P0,#0FCH LCALL DELAY MOV P0,#0F9H LCALL DELAY MOV P0,#0F3H LCALL DELAY MOV P0,#0F6H LCALL DELAY JB P1.2,LOOP1 MOV TMOD,#01010101B MOV TH0,#0FFH MOV TL0,#0FFH MOV TH1,#0FFH MOV TL1,#0FFH 28 SETB TR0 SETB TR1 SETB ET0 SETB ET1 SETB EA MOV DPTR,#TABLE MOV A,R0 MOVC A,@A+DPTR MOV P2,A JMP LOOP2 SJMP $ COUNT0: MOV TH0,#0FFH;减速中断 MOV TL0,#0FFH CJNE R0,#9,L4 JMP L5 L4: INC R0

L5: setb TR0 RETI COUNT1: MOV TH1,#0FFH;加速中断 MOV TL1,#0FFH CJNE R0,#1,L6 JMP L7 L6: DEC R0 L7: setb TR1 RETI DELAY: MOV A,R0;延时 MOV R1,A L1: MOV R2,#50 L2: MOV R3,#250 L3: DJNZ R3,L3 DJNZ R2,L2 DJNZ R1,L1 RET TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH;显示程序查表,共阴 END

第三篇:单片机公开课教案

MCS-51单片机指令的寻址方式教案

教者:达雯

班级:0703

课时:1课时

教学目标:掌握MCS-51七种寻址方式的含义和特点

能识别指令中操作数所采用的寻址方式

能根据寻址方式确定操作数的来源

教学重点:直接寻址、立即寻址、寄存器寻址、寄存器间接寻址的特点 教学难点:能识别指令中操作数所采用的寻址方式

能根据寻址方式确定操作数的来源

教学过程:

一、复习导入

汇编语言的指令格式?

标号:操作码助记符 [(目的操作数),(源操作数)];注释

二、新授:

寻址方式的概念:如何找到存放被操作数据的位置(地址)的方法

1、立即寻址:由指令直接给出操作数:8位和16位。数值前加“#”表示

例如:MOVA,#30H2、直接寻址:指令直接给出操作数地址的寻址方式。

例如:MOVA,3AH3、寄存器寻址:以通用寄存器的内容为操作数的寻址方式

例如:MOVA,R14、寄存器间接寻址:以寄存器中的内容为地址,该地址中的内容为操作数的寻址方式。例如:MOVA,@R15、变址寻址:以DPTR或者PC作为基址寄存器,其内容为基地址,以累加器A作为变址寄存器,其内容为变址,并将两个寄存器内容也就是基址和变址相加,形成16位操作数地址。然后在程序存储器中找到该地址所对应的单元,其内容即为操作数。

6、相对寻址:以当前PC的内容为基址,加上指令给出的相对偏移量形成新的PC值的寻址方式

7、位寻址:对位地址中的内容作位操作的寻址方式

例如:MOVC,37H

三、寻址方式中的常用符号注释

四、课堂练习

五、小结:七种寻址方式

第四篇:单片机实验教案

实验一

数据传送

一、实验目的

1、熟悉单片机指令系统,掌握单片机循环程序设计方法

2、掌握单片机数据排序方法.二.实验内容:

预先向单片机内部RAM 50H 开始填入一批数据,以00H结尾.编这批数据按从小到大的顺序进行排序.三、实验步骤:

a.先向单片机内部RAM50H开始填入一批数据,以00H结尾

b.编程求出这批数据的长度,存入R7中,编程将这批数据按从小到大顺序

四、参考程序:

ORG 0030H

MOV R0,#50H

MOV R7,#00H

CLR 00H

LOOP2:CJNE @R0,#00H ,TB

LJMP MAIN

TB: INC R7

INC R0

LJMP LOOP2

MAIN:MOV R0,#50H

DJNZ R7,LOOP3

LJMP A0

LOOP3: MOV B, R7

MOV A,@R0 LOOP:INC R0

MOV R2,A

SUBB A,@R0

MOV A,R2

JC NEXT

SETB 00H

XCH A,@R0

DEC R0

XCH A,@R0

INC R0 NEXT:MOV A,@R0

DJNZ B,LOOP

JB 00H,MAIN

A0 :SJMP $

END 实验二 循环结构程序设计

一、实验目的

1、熟悉单片机指令系统,掌握单片机循环程序设计方法

2、掌握单片机数据排序方法.二.实验内容:

预先向单片机内部RAM 50H 开始填入一批数据,以00H结尾.编这批数据按从小到大的顺序进行排序.三、实验步骤:

a.先向单片机内部RAM50H开始填入一批数据,以00H结尾

b.编程求出这批数据的长度,存入R7中,编程将这批数据按从小到大顺序

四、参考程序: ORG 1000H MOV R0,#50H MOV R7,#00H LOOP: MOV A,@R0

INC R0 CJNE A, #00H,LOOP1 SJMP LOOP2 LOOP1:INC R7 SJMP LOOP LOOP2:MOV R0, #50H CLR 00H;(00H)=00H为标志位

MOV A,R7 MOV R6,A LOOP3:MOV A,@R0 INC R0 MOV 30H,@R0 CJNE A,30H,LOOP4 LOOP4:JC LOOP5

XCH A,@R0 DEC R0 XCH A,@R0 INC R0 SETB 00H INC R0 LOOP5:DJNZ R6,LOOP3 JB 00H,LOOP2 SJMP $ END

实验三 信号灯控制

一、实验目的

(1)学习P1口的使用方法;

(2)学习延时子程序的编写。

(3)掌握proteus仿真软件的基本使用。

二、实验内容

做单一灯的左移右移,硬件电路如图4.4.1所示,八个发光二极管L1-L8分别接在单片机的P1.0-P1.7接口上,输出“0”时,发光二极管亮,开始时P1.0→P1.1→P1.2→P1.3→┅→P1.7→P1.6→┅→P1.0亮,重复循环。

三、程序流程图:

四、参考程序 ORG 0 START: MOV R2,#8 MOV A,#0FEH SETB C LOOP: MOV P1,A LCALL DELAY RLC A DJNZ R2,LOOP MOV R2,#8 LOOP1: MOV P1,A LCALL DELAY RRC A DJNZ R2,LOOP1 LJMP START DELAY: MOV R5,#20;D1: MOV R6,#20 D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET END

实验四 脉冲计数实验

一、实验目的:

1)掌握定时计数器的使用。2)学习延迟程序的编写和使用。

3)熟悉proteus仿真软件的使用方法。

二、实验内容:

1)开始时,显示“00”,第一次按下SP1后就开始计时。2)第二次按下SP1后,计时停止。3)

第三次按下SP1时,计时归零。

三、主程序流程图

四、中断服务程序流程图如下:

五、参考程序如下: TCNTA EQU 30H TCNTB EQU 31H SEC EQU 32H KEYCNT EQU 33H SP1 BIT P3.5 ORG 00H LJMP START ORG 0BH LJMP INT_T0 START: MOV KEYCNT,#00H MOV SEC,#00H MOV A,SEC MOV B,#10 DIV AB MOV DPTR,#TABLE MOVC A,@A+DPTR MOV P0,A MOV A,B MOV DPTR,#TABLE MOVC A,@A+DPTR MOV P2,A MOV TMOD,#02H SETB ET0 SETB EA WT: JB SP1,WT LCALL DELY10MS JB SP1,WT INC KEYCNT MOV A,KEYCNT CJNE A,#01H,KN1 SETB TR0 MOV TH0,#06H MOV TL0,#06H MOV TCNTA,#00H MOV TCNTB,#00H LJMP DKN KN1: CJNE A,#02H,KN2 CLR TR0 LJMP DKN KN2: CJNE A,#03H,DKN MOV SEC,#00H MOV A,SEC MOV B,#10 DIV AB MOV DPTR,#TABLE MOVC A,@A+DPTR MOV P0,A MOV A,B MOV DPTR,#TABLE MOVC A,@A+DPTR MOV P2,A MOV KEYCNT,#00H DKN: JNB SP1,$ LJMP WT DELY10MS: MOV R6,#20 D1: MOV R7,#248 DJNZ R7,$ DJNZ R6,D1 RET INT_T0: INC TCNTA MOV A,TCNTA CJNE A,#100,NEXT MOV TCNTA,#00H INC TCNTB MOV A,TCNTB CJNE A,#4,NEXT MOV TCNTB,#00H INC SEC MOV A,SEC CJNE A,#100,DONE MOV SEC,#00H DONE: MOV A,SEC MOV B,#10 DIV AB MOV DPTR,#TABLE MOVC A,@A+DPTR MOV P0,A MOV A,B MOV DPTR,#TABLE MOVC A,@A+DPTR MOV P2,A NEXT: RETI TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH END

实验五 8255控制交通灯

一、实验目的

进一步了解8255芯片的结构及编程方法,学习模拟交通控制的实现方法。

二、实验内容

用8255做输出口,控制十二个发光二极管燃灭,模拟交通灯管理。

四、参考程序如下: ;交通灯

ORG 0030H

JOD0:MOV SP,#60H

MOV DPTR,#0FFDBH

MOV A,#88H

;8255初始化

MOVX @DPTR,A

MOV DPTR,#0FFD8H

MOV A,#0B6H

MOVX @DPTR,A

INC DPTR

MOV A,#0DH

MOVX @DPTR,A;点亮4个红灯

MOV R2,#25H;延时

LCALL DELY

JOD3:MOV DPTR,#0FFD8H

MOV A,#75H

MOVX @DPTR,A

INC DPTR

MOV A,#0DH

MOVX @DPTR,A

;东西绿灯亮,南北红灯亮

MOV R2,#55H

LCALL DELY

;延时

MOV R7,#05H

;闪烁次数

JOD1:MOV DPTR,#0FFD8H

MOV A,#0F3H

MOVX @DPTR,A

INC DPTR

MOV A,#0CH

MOVX @DPTR,A

;东西黄灯亮,南北红灯亮

MOV R2,#20H

LCALL DELY

;延时

MOV DPTR,#0FFD8H

MOV A,#0F7H

MOVX @DPTR,A

INC DPTR

MOV A,#0DH

MOVX @DPTR,A

;南北红灯亮

MOV R2,#20H

LCALL DELY

;延时

DJNZ R7,JOD1

;闪烁次数未到继续

MOV DPTR,#0FFD8H

MOV A,#0AEH

MOVX @DPTR,A

INC DPTR

MOV A,#0BH

MOVX @DPTR,A;东西红灯亮,南北绿灯亮

MOV R2,#55H

LCALL DELY

;延时

MOV R7,#05H

;闪烁次数

JOD2:MOV DPTR,#0FFD8H

MOV A,#9EH

MOVX @DPTR,A

INC DPTR

MOV A,#07H

MOVX @DPTR,A

;东西红灯亮,南北黄灯亮

MOV R2,#20H

LCALL DELY

;延时

MOV DPTR,#0FFD8H

MOV A,#0BEH

MOVX @DPTR,A

INC DPTR

MOV A,#0FH

MOVX @DPTR,A

;东西红灯亮

MOV R2,#20H

LCALL DELY

;延时

DJNZ R7,JOD2

;闪烁次数未到继续

LJMP JOD3

ORG 0213H

DELY:PUSH 02H

DEL2:PUSH 02H

DEL3:PUSH 02H

DEL4:DJNZ R2,DEL4

POP 02H

DJNZ R2,DEL3

POP 02H

DJNZ R2,DEL2

POP 02H

DJNZ R2,DELY

RET

END

实验六 A/D转换

一、实验目的

1.掌握A/D转换与单片机的接口方法 2.了解A/D芯片0809性能及编程方法 3.通过实验了解单片机如何进行数据采集

二、实验内容

1.利用proteus软件仿真,实现A/D转换实验。

2.实验要求通过电位器提供模拟量的输入,编写程序,将模拟量转换成数字量,通过数码管显示出来。

三、参考程序如下: LED_0 EQU 30H

;存放三个数码管的段码 LED_1 EQU 31H LED_2 EQU 32H

ADC EQU 35H;存放转换后的数据 ST BIT P3.2 OE BIT P3.0 EOC BIT P3.1 ORG 00H

START: MOV LED_0,#00H MOV LED_1,#00H MOV LED_2,#00H MOV DPTR,#TABLE;送段码表首地址

SETB P3.4 SETB P3.5 CLR P3.6

;选择ADC0808的通道3

WAIT: CLR ST SETB ST CLR ST

;启动转换

JNB EOC,$

;等待转换结束

SETB OE

;允许输出

MOV ADC,P1

;暂存转换结果

CLR OE

;关闭输出

;MOV A,ADC

;将AD转换结果转换成BCD码

;MOV B,#100;DIV AB;MOV LED_2,A;MOV A,B;MOV B,#10;DIV AB;MOV LED_1,A;MOV LED_0,B lcall

intov LCALL DISP

;显示AD转换结果

SJMP WAIT

intov:;mov a,led_1;m;ov b,#10;mul ab

;add a,led_0;mov r1,a;mov a,led_2;mov b,#100;mul ab;add a,r1 mov dptr,#tab mov a,adc

movc a,@a+dptr mov b,#2 p ab mov r1,b mov b,#10 p ab mov led_2,a mov led_1,b cjne r1,#01,kk1

mov led_0,#05 back:

ret kk1:

mov led_0,#00

ajmp back

DISP: mov

dptr,#table

MOV A,LED_0

MOVC A,@A+DPTR

CLR P2.3 MOV P0,A LCALL DELAY SETB P2.3

mov

dptr,#table MOV A,LED_1 MOVC A,@A+DPTR CLR P2.2 MOV P0,A LCALL DELAY SETB P2.2

mov

dptr,#table MOV A,LED_2 MOVC A,@A+DPTR setb

acc.7 CLR P2.1

;数码显示子程序 MOV P0,A LCALL DELAY SETB P2.1 RET DELAY: MOV R6,#10

;延时5毫秒 D1: MOV R7,#250 DJNZ R7,$ DJNZ R6,D1

RET

TABLE: DB 3FH,06H,5BH,4FH,66H DB 6DH,7DH,07H,7FH,6FH

tab:db 0, 0 ,0 , 1, 0, 2, 0, db 4, 0, 0, 5, 0, 6, 0, 0, 7, 0 db 8, 0, 0, 9, 0, 0, 10, 0, 11, 0 db 0, 12, 0, 13, 0, 0, 14, 0, 15, 0 db 0, 16, 0, 17, 0, 0, 18, 0, 19, 0 db 0, 20, 0, 0, 21, 0, 22, 0, 0, 23 db 0, 24, 0, 0, 25, 0, 26, 0, 0, 27 db 0, 28, 0, 0, 29, 0, 0, 30, 0, 31 db 0, 0, 32, 0, 33, 0, 0, 34, 0, 35 db 0, 0, 36, 0, 37, 0, 0, 38, 0, 39 db 0, 0, 40, 0, 0, 41, 0, 42, 0, 0 db 43, 0, 44, 0, 0, 45, 0, 46, 0, 0 db 47, 0, 48, 0, 0, 49, 0, 50, 0, 0 db 51, 0, 0, 52, 0, 53, 0, 0, 54, 0 db 55, 0, 0, 56, 0, 57, 0, 0, 58, 0 db 59, 0, 0, 60, 0, 0, 61, 0, 62, 0 db 0, 63, 0, 64, 0, 0, 65, 0, 66, 0 db 0, 67, 0, 68, 0, 0, 69, 0, 70, 0 db 0, 71, 0, 0, 72, 0, 73, 0, 0, 74 db 0, 75, 0, 0, 76, 0, 77, 0, 0, 78 db 0, 79, 0, 0, 80, 0, 0, 81, 0, 82 db 0, 0, 83, 0, 84, 0, 0, 85, 0, 86 db 0, 0, 87, 0, 88, 0, 0, 89, 0, 90 db 0, 0, 91, 0, 0, 92, 0, 93, 0, 0 db 94, 0, 95, 0, 0, 96, 0, 97, 0, 0 db 98, 0, 99, 0, 0, 100, 0, 0, 0

END

0, 3, 0

第五篇:单片机实验教案

实验一 集成开发环境keil c51的使用与调试

Keil C51 u Vision2 是德国Keil公司开发的基于Windows环境的8051软件开发平台,它集项目管理、源程序编辑、程序调试于一体,是一个强大的集成开发环境。

u Vision2 支持Keil的各种8051工具,包括:C编译器,宏汇编译器、连接/定位器及Object-hex转换程序,可以帮助用户快速有效的实现嵌入式系统的设计与调试。

1.1 硬件安装

1、连接51CPU板,在实验箱右下角有三个插座:J1、J2、J3,用来连接51CPU板,在51CPU板上有一个小拨码开关:J18,是单片机的EA脚,是用来选择读片内还是片外ROM的,拨向左边为读片内ROM;拨向右边为读片外ROM。

2、KEIL仿真器与实验箱的连接:将KEIL仿真器40芯的排线连到51CPU板的40芯插座上,仿真器的USB连接线连到微机的USB口。

3、八段数码管右上角的两个拨码小开关是用来设置工作模式的,将两个拨码小开关同时拨向右边是选择51单片机工作模式,此时应拨向右边。

1.2 新建一个项目文件

首先点击 Keil uVision2,进入uVision2界面。点击工具栏Project选项中的New Project,准备开始建立自己的项目。

输入工程文件名称,并选择保存工程文件的目录。

为项目文件选择一个目标器件(如ATMEL89C51),如图所示。

用鼠标对项目工作区的目标1,点击右键在弹出的菜单中选择“为目标‘目标1’设置选项”如下图所示。

在“为目标‘目标1’设置选项”中,点击“调试”菜单,在此菜单中可选择是使用硬件仿真,还是软件仿真,连接实验箱做实验时选择硬件仿真,点击硬件仿真选项后面的[设置]选项,在此对对话框中选择串口和波特率,串口根据所连电脑来决定。波特率为38400。

软件仿真 硬件仿真 选择串口 选择波特率

点击“文件/新建”创建源程序文件并输入程序代码。

在文本框中输入原程序,如下图所示

点击“文件/保存“对程序进行保存

用鼠标对项目工作区的目标1,点击右键在弹出的菜单中选择添加文件到原代码组,如下图所示

在弹出的添加文件框中,选择需要添加到项目中的文件

点击编译连接的图标,对项目文件进行编译

点击“调试/启动/停止调试”进入调试界面

在调试界面中可以对程序进行单步或者全速运行的调试

连机/停止 全速运行

单步

若要查看内存中的数据,点击“视图/存储器窗口”

在此地址框中,输入不同的指令查看内部数据

如果需要查看一些内部数据,在菜单栏点击[视图/存储窗口]。

C:0X地址 显示程序存储区数据 X:0X地址 显示数据存储区中数据 D:0X地址 显示CPU内部存储区中数据

注意:仿真器使用者使用时应注意:

Keil C仿真器用户程序在全速运行时,如果需暂停运行,请按实验仪键盘“RST”,此时仿真器存储器数据清零。如果您要再次运行您所编写的程序,就必须重新装载运行。

1.3 实验指导使用说明

点击“帮助/使用手册”打开“HK系列实验指导”

选择“软件实验”右边的下三角可选择实验类别或者芯片查询

点击实验目的、实验电路、实验连线、实验程序可查看关于实验的具体介绍

在芯片查询中,可查看常用芯片的管脚定义

实验二 程序设计实验

C51中进行绝对地址访问:

(1)在头文件中加入

#include (2)可以使用 CBYTE XBYTE PWORD DBYTE CWORE

XWORD PBYTE DWORD 指向内存空间的绝对地址。(具体看课本Page 71~72)

(3)使用指针进行绝对地址访问(具体看课本Page68~71,课后用指针对下面实验程序进行修改)

例如:

#define ADDR

XBYTE[0x8000]

定义ADDR为 片外RAM地址0x8000的内容

Segment = CBYTE[0x0002]

将程序存储器的0002H地址的内容赋值给Segment

Segment = XBYTE[0x0002]

将向片外RAM的0002H地址的内容赋值给Segment

XBYTE[0x0002]=57

将57赋值给片外RAM0002H绝对地址

实验1:将片外8000H中的内容拆开,高位送8001H地址低位,低位送8002H的地址低位,8001H和8002H地址单元的高位清零。#include #include

#define a0 XBYTE[0x8000] #define a1 XBYTE[0x8001] #define a2 XBYTE[0x8002]

void main(){ a0 = 0xab;a1 = a0 & 0x0f;a2 = a0 >> 4;}

实验2:使用绝对地址进行char型数组赋值,数组的首地址为片外8000H #include #include #define uint unsigned int uint i;#define uchar unsigned char void main(){

for(i=0;i<10;i++){

XBYTE[0x8000+i]=i;} }

请对上述实验进行修改:使用绝对地址进行int型数组赋值,数组的首地址为片外8000H

实验3:将内部RAM中的50H-5AH中的无符号数,按照从小到大的次序重新排列

#include #include

#define uint unsigned int #define uchar unsigned char uint i,j;uchar temp;void main(){ for(i=0;i<=10;i++)//赋初值

{

DBYTE[0x50+i]=10-i;} for(i=0;i<=10;i++){

for(j=i+1;j<10;j++)

{

if(DBYTE[0x50+i]>DBYTE[0x50+j])

{

temp=DBYTE[0x50+i];

DBYTE[0x50+i]=DBYTE[0x50+j];

DBYTE[0x50+j]=temp;

}

} } } 实验三

单片机I/O接口实验

1.看懂电路图

2.用开关分别控制,左边4盏灯同时亮,右边的4盏熄灭,开关导向另一边,左边4盏熄灭,右边4盏点亮。#include sbit P3_0 = P3^0;

//查阅sbit和bit 的区别 #define uint unsigned int #define uchar unsigned char void main(){ While(1){ if(P3_0 == 0)

{

P0 = 0x0f;} else P0=0xf0;} }

3.下面按照实验书本的要求做实验,并调试程序延时时间。

实验四

八段数码管滚动显示程序设计

1.了解扩展电路的基本结构。

2. 清楚8155各个寄存器的物理地址是怎么得到的。

3.弄清楚8155、74LS164、UA2003三块芯片的各个引脚的基本功能。

4.74LS164的串行输入的程序代码的编写

/* “验证式"?实验十一

八段数码管显示

*/ #include #define LEDLen 6 #define mode 0x03;#define CAddr XBYTE[0xe100]/* 控制字地址 */ #define OUTBIT XBYTE[0xe101]/* 位控制口 */ #define CLK164 XBYTE[0xe102]/* 段控制口(接164时钟位)*/ #define DAT164 XBYTE[0xe102] /* 段控制口(接164数据位)*/ #define IN

XBYTE[0xe103] /* 键盘读入口 */

unsigned char LEDBuf[LEDLen];/* 显示缓冲 */ code unsigned char LEDMAP[] = { /* 八段管显示码 */

0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71 };

void Delay(unsigned char CNT){

unsigned char i;

while(CNT--!=0)

for(i=100;i!=0;i--);}

void DisplayLED(){

unsigned char i, j;

unsigned char Pos;

unsigned char LED;

Pos = 0x20;/* 从左边开始显示 */

for(i = 0;i < LEDLen;i++)

{

OUTBIT = 0;

/* 关所有八段管 */

LED = LEDBuf[i];

for(j = 0;j < 8;j++)

{

/*送164*/

if(LED & 0x80)DAT164 = 1;

else DAT164 = 0;

CLK164 = CLK164|0x02;

CLK164 = CLK164&0xfd;

LED <<= 1;

}

OUTBIT = Pos;/* 显示一位八段管 */

Delay(1);

Pos >>= 1;

/* 显示下一位 */

}

OUTBIT = 0;

/* 关所有八段管 */ }

void main(){

unsigned char i = 0;

unsigned char j;

CAddr = mode;

while(1){

LEDBuf[0] = LEDMAP[ i

& 0x0f];

LEDBuf[1] = LEDMAP[(i+1)& 0x0f];

LEDBuf[2] = LEDMAP[(i+2)& 0x0f];

LEDBuf[3] = LEDMAP[(i+3)& 0x0f];

LEDBuf[4] = LEDMAP[(i+4)& 0x0f];

LEDBuf[5] = LEDMAP[(i+5)& 0x0f];

i++;

for(j=0;j<30;j++)

DisplayLED();

/* 延时 */

} }

集成开发环境详细设置解说

在第二章中,我们已经简介了单片机软件Keil C51的开发过程。即: 1.建立一个工程项目,选择芯片,确定选项。2.建立汇编源文件或C源文件。3.用项目管理器生成各种应用文件。4.检查并修改源文件中的错误。5.编译连接通过后进行软件模拟仿真。6.编译连接通过后进行硬件模拟仿真。7.编程操作。8.应用。

这里我们介绍工程的较详细设置及常用调试方法。20.1

工程项目的建立、源程序文件的建立及加载

Keil C51软件UVision打开后,程序窗口的左边有一个项目工作区管理窗口,该窗口有3个标签,分别是Files、Regs和Books,这3个标签页分别显示当前项目的文件结构、CPU的寄存器及部分特殊功能寄存器的值(调试时才出现)和所选CPU的附加说明文件,如果是第一次启动Keil C51,那么这3个标签页全是空的(图20-1)。

图20-1

Keil C51打开后界面

20.1.1

建立工程文件

在单片机项目开发中,有时有多个的源程序文件,并且还要为项目选择CPU以确定编译、汇编、连接的参数,指定调试的方式等。为便于管理,Keil C51使用工程项目(Project)的方法,将这些参数设置和所需的所有文件都放在一个工程项目中,只能对工程项目而不能对单一的源程序进行编译(汇编)和连接等操作。

先在硬盘上建立一个需保存工程文件的目录(例如在“我的文档” 中建立一个test的文件夹),为便于管理及使用,目录名称可与工程名称一致。选择“工程>新工程”菜单(图20-2)。弹出对话框,要求给将要建立的工程起一个名字,可以在编辑框中输入一个名字(例如test),扩展名不必输入(默认的扩展名为.uv2)。点击“保存”按钮(图20-3)。随后弹出一个“为目标target选择设备”(Select Device for Target “Target1”)对话框,这个对话框要求选择目标CPU(即你所用单片机芯片的型号),Keil C51支持的CPU很多,我们选择Atmel公司的AT89C51(或AT89S51)芯片,用鼠标单击Atmel前的“+”号,选择“AT89C51(或AT89S51)”单片机后按确定(图20-4)。随即系统弹出是否拷贝8051启动代码到工程项目并添加到当前项目组的提示(Copy Standard 8051 Startup Code to Project Folder and Add File to Project ?),我们选否。此时,在工程窗口的文件页中,出现了“Target 1”,前面有“+”号,点击“+”号展开,可以看到下一层的“Source Group1”。

图20-2

选择“工程>新工程”菜单界面

图20-3

建立新工程界面

图20-4

选择单片机型号界面

20.1.2

源程序文件的建立

使用菜单“文件>新建”或者点击工具栏的新建文件按钮(图20-5),即在右侧打开一个新的文本编辑窗口,在该窗口中可以输入汇编语言源程序或C语言源程序(图20-6)。程序输入完成后,选择“文件”,在下拉菜单中选中“另存为”,将该文件以扩展名为.asm格式(汇编语言源程序)或.c格式(C语言源程序)保存在刚才所建立的一个文件夹中(test),这里假设源程序文件名为test.asm(图20-7)。

图20-5

新建源程序文件界面

图20-6

打开新的文本编辑窗口

图20-7

“另存为” 对话框

源程序文件也可以使用任意的文本编辑器编写。20.1.3

添加文件到当前项目组中

这时的工程项目还是一个空的工程,里面什么文件也没有,把刚才编写好的源程序test.asm加载进工程。单击工程管理器中“Target 1”前的“+”号,出现“Source Group1”后再单击,加亮后右击。在出现的下拉窗口中选择“Add Files to Group‘Source Group1’”(图20-8)。注意,该对话框下面的“文件类型”默认为C source file(*.c),也就是以C为扩展名的文件,如我们的文件是以asm为扩展名的,那么在列表框中找不到test.asm,要将文件类型改掉。点击对话框中“文件类型”后的下拉列表,找到并选中“Asm Source File(*.a51,*.asm)”,这样在列表框中就可以找到test.asm文件了(图20-9)。我们可以在增加文件窗口中选择刚才以asm格式(或c格式)编辑的文件,鼠标单击“ADD”按钮,这时源程序文件便加入到Source Group1这个组里了,随后关闭此对话窗口。点击 “ Source Group1”前的“+”号,可以看到test.asm文件已在其中(图20-10)。双击后,即可打开该源程序。

图20-8

Add Files to Group‘Source Group1’界面

图20-9

Add Files to Group‘Source Group1’对话框

图20-10

test.asm文件

20.2

工程项目的详细设置 工程建立好以后,还要对工程进行进一步的设置,以满足要求。

首先点击左边窗口的Target1,然后使用菜单“项目>目标‘target1’选项 ”即出现对工程设置的对话框,共有8个页面,默认为对象页面(图20-11)。绝大部分设置项通常可以采用默认值。

图20-11

对象页面

20.2.1

对象页面

时钟(MHz)后面的数值是晶振频率值,默认值是所选目标CPU的最高可用频率值,对于AT89C51而言是24MHz,而AT89S51是33MHz。该数值与最终产生的目标代码无关,仅用于软件模拟调试时显示程序执行时间。正确设置该数值可使显示时间与实际所用时间一致,一般将其设置成与你实际所用的晶振频率相同。

储存器模式用于设置RAM使用情况,有3个选择项,Small:是所有变量都在单片机的内部RAM中。Compact:变量存储在外部RAM里,使用8位间接寻址。Large:变量存储在外部RAM里,使用16位间接寻址,可以使用全部外部的扩展RAM。

1.Small:一般使用Small来存储变量,此时单片机优先将变量存储在内部RAM里,如果内部RAM空间不够,才会存到外部RAM中。

2.Compact:Compact的方式要通过程序来指定页的高位地址,编程较复杂,如果外部RAM很少,只有256字节,那么对该256字节的读取就比较快。如果超过256字节,而且需要不断地进行切换,就较麻烦,Compact模式适用于比较少的外部RAM的情况。

3.Large:Large模式是指变量会优先分配到外部RAM里。需要注意的是,3种存储方式都支持内部256字节和外部64KB的RAM。因为变量存储在内部RAM里,运算速度比存储在外部RAM要快得多,大部分的应用都是选择Small模式。

代码ROM大小用于设置ROM空间的使用,也有3个选择项,Small、Compact及Large。1.Small:只用低于2K的程序空间,适用于AT89C2051这些芯片,2051只有2K的代码空间,所以跳转地址只有2KB,编译的时候会使用ACALL AJMP这些短跳转指令,而不会使用LCALL LJMP指令。如果代码地址跳转超过2K,那么会出错。

2.Compact:单个函数的代码量不能超过2K,整个程序可以使用64K程序空间。3.Large:可用全部64K空间,表示程序或子函数代码都可以大到64KB,使用code bank还可以更大。通常都选用该方式。选择Large方式速度不会比Small慢很多,所以一般没有必要选择Compact和Small方式。

操作系统选项中,Keil C51提供了两种操作系统:Rtx tiny和Rtx full,通常我们不使用任何操作系统,用该项的默认值:None(不使用任何操作系统)。Use on-chip ROM(0x0-0xFFF)选择项,表示使用片上的ROM(选中该项并不会影响最终生成的目标代码量),该选项取决于单片机应用系统,如果单片机的EA接高电平,则选中这个选项,表示使用内部ROM,如果单片机的EA接低电平,表示使用外部ROM,则不选中该选项。

片外代码(CODE)储存器:表示片外ROM的开始地址和大小,如果没有外接程序存储器,那么不需要填任何数据。这里假设使用一个片外ROM,地址从0x7000开始,一般填16进制的数,Size(尺寸)为片外ROM的大小。假设外接ROM的大小为0x2000字节,则最多

(第1章) 单片机教案

第一篇:(第1章) 单片机教案 §1概论 §1.1 单片机特点及发展概况 一、什么是单片机 二、单片机的特点 ...
点击下载
分享:
最新文档
热门文章
    确认删除?
    QQ
    • QQ点击这里给我发消息
    微信客服
    • 微信客服
    回到顶部