单片机教案模板(共13篇)
第1篇:单片机公开课教案
MCS-51单片机指令的寻址方式教案
教者:达雯
班级:0703
课时:1课时
教学目标:掌握MCS-51七种寻址方式的含义和特点
能识别指令中操作数所采用的寻址方式
能根据寻址方式确定操作数的来源
教学重点:直接寻址、立即寻址、寄存器寻址、寄存器间接寻址的特点 教学难点:能识别指令中操作数所采用的寻址方式
能根据寻址方式确定操作数的来源
教学过程:
一、复习导入
汇编语言的指令格式?
标号:操作码助记符 [(目的操作数),(源操作数)];注释
二、新授:
寻址方式的概念:如何找到存放被操作数据的位置(地址)的方法
1、立即寻址:由指令直接给出操作数:8位和16位。数值前加“#”表示
例如:MOVA,#30H
2、直接寻址:指令直接给出操作数地址的寻址方式。
例如:MOVA,3AH
3、寄存器寻址:以通用寄存器的内容为操作数的寻址方式
例如:MOVA,R1
4、寄存器间接寻址:以寄存器中的内容为地址,该地址中的内容为操作数的寻址方式。例如:MOVA,@R1
5、变址寻址:以DPTR或者PC作为基址寄存器,其内容为基地址,以累加器A作为变址寄存器,其内容为变址,并将两个寄存器内容也就是基址和变址相加,形成16位操作数地址。然后在程序存储器中找到该地址所对应的单元,其内容即为操作数。
6、相对寻址:以当前PC的内容为基址,加上指令给出的相对偏移量形成新的PC值的寻址方式
7、位寻址:对位地址中的内容作位操作的寻址方式
例如:MOVC,37H
三、寻址方式中的常用符号注释
四、课堂练习
五、小结:七种寻址方式
第2篇:单片机实验教案
实验一
数据传送
一、实验目的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
党建NZ 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
党建NZ 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:党建NZ 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 党建NZ R2,LOOP MOV R2,#8 LOOP1: MOV P1,A LCALL DELAY RRC A 党建NZ R2,LOOP1 LJMP START DELAY: MOV R5,#20;D1: MOV R6,#20 D2: MOV R7,#248 党建NZ R7,$ 党建NZ R6,D2 党建NZ 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 党建NZ R7,$ 党建NZ 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
;延时
党建NZ 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
;延时
党建NZ R7,JOD2
;闪烁次数未到继续
LJMP JOD3
ORG 0213H
DELY:PUSH 02H
DEL2:PUSH 02H
DEL3:PUSH 02H
DEL4:党建NZ R2,DEL4
POP 02H
党建NZ R2,DEL3
POP 02H
党建NZ R2,DEL2
POP 02H
党建NZ 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 div ab mov r1,b mov b,#10 div 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 党建NZ R7,$ 党建NZ 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
第3篇:单片机实验教案
实验一 集成开发环境keil c51的使用与调试
Keil C51 u Vision2 是德国Keil公司开发的基于Windows环境的8051软件开发平台,它集项目管理、源程序编辑、程序调试于一体,是一个强大的集成开发环境。
u Vision2 支持Keil的各种8051工具,包括:C编译器,宏汇编译器、连接/定位器及Object-hex转换程序,可以帮助用户快速有效的实现嵌入式系统的设计与调试。
1.1 硬件安装
1、连接51CPU板,在实验箱右下角有三个插座:J
1、J
2、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
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
{
DBYTE[0x50+i]=10-i;} for(i=0;i
for(j=i+1;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.
弄清楚81
55、74LS16
4、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
{
OUTBIT = 0;
/* 关所有八段管 */
LED = LEDBuf[i];
for(j = 0;j
{
/*送164*/
if(LED & 0x80)DAT164 = 1;
else DAT164 = 0;
CLK164 = CLK164|0x02;
CLK164 = CLK164&0xfd;
LED
}
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
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字节,则最多可以外接3块片外ROM。
片外数据(XDATA)储存器:用于确定系统扩展RAM的地址范围,可以填上外接Xdata外部数据存储器的起始地址和大小,这些选择项必须根据所用硬件来决定。如果仅仅是89C51单片应用,未进行任何扩展,那么无需设置。
代码分段:是使用Code Banking技术。Keil C51可以支持程序代码超过64KB的情况,最大可以有2MB的程序代码。如果代码超过64KB,那么就要使用Code Banking技术,以支持更多的程序空间。
20.2.2
输出页面
输出页面中(图20-12),按钮“选择目标(OBJ)目录”是用来选择最终的目标文件所在的文件夹,默认是与工程文件在同一个文件夹中。
图20-12
Output页面
“可执行文件名”:设置生成的目标文件的名字,缺省情况下和项目的名字一样。Create Executable:如果要生成OMF以及HEX文件,一般选中“调试信息”和“浏览信息”。选中“调试信息”将会产生调试信息,这些信息用于调试,如果需要对程序进行调试,应当选中该项。“浏览信息”是产生各种信息,该信息可以用菜单“查看” 进行浏览,一般取默认值。“生成hex文件”用于生成可执行代码文件,默认情况下该项未被选中,如果要烧录芯片做硬件实验,就必须选中该项。
Create Library:选中该项时将生成lib库文件,一般的应用是不生成库文件的。构造后操作栏中有以下几个设置。
完成时“嘀”一声提示:编译完成之后发出“咚”的声音。
开始调试:马上启动调试(软件仿真或硬件仿真),根据需要来设置,一般是不选中。运行用户程序#
1、运行用户程序#2:这个选项可以设置编译完之后所要运行的其他应用程序(比如有些用户自己编写了烧写芯片的程序,编译完便执行该程序,将Hex文件写入芯片),或者调用外部的仿真程序。可根据自己的需要设置。
20.2.3
列表页面
列表页面用于调整生成的列表文件选项。在汇编或编译完成后将产生(*.lst)的列表文件,在连接完成后也将产生(*.m51)的列表文件,该页用于对列表文件的内容和形式进行细致的调节,其中比较常用的选项是“C compile Listing”下的“汇编代码”项,选中该项可以在列表文件中生成C语言源程序所对应的汇编代码(图20-13)。
图20-13
Listing页面
20.2.4
C51页面
C51页面用于对Keil C51软件的C51编译器的编译过程进行控制(图20-14),其中比较常用的是“代码优化选项”组,该组中级别是优化等级,C51在对源程序进行编译时,可以对代码多至9级优化,默认使用第8级,一般不必修改,如果在编译中出现一些问题,可以降低优化级别再试。“侧重”是选择编译优先方式,第一项是代码大小优化(最终生成的代码量小),第二项是执行速度优先(最终生成的代码速度快),第三项缺省。默认的是速度优先,可根据需要更改。
图20-14
C51页面
20.2.5
调试页面
调试页面中(图20-15)有两类仿真形式可选:“使用模拟器”和“Keil Monitor-51 Driver”,前一种是纯软件仿真,后一种是带有Monitor-51目标仿真器的仿真。对于没有Monitor-51目标仿真器的用户,只有采用软件仿真。默认方式下的仿真是软件仿真(使用模拟器)。
图20-15
Debug页面 启动时加载程序:选择这项之后,Keil C51会自动装载程序代码。
一直运行到main():调试C语言程序时可以选择这一项,PC会自动运行到main程序处。
工程设置对话框中的其他各页面与C51编译选项、A51的汇编选项、BL51连接器的连接选项等用法有关,这里均取默认值。
设置完成后按确认返回主界面,工程文件就建立、设置完毕了。20.3
编译、连接
在设置好工程后,即可进行编译、连接。选择主菜单栏中的“项目”,在下拉菜单中选中“构造对象”(图20-16),对当前工程进行编译、连接,这时输出窗口出现源程序的编译结果。如果选择“重新构造所有对象文件”将会对当前工程中的所有文件重新进行编译,然后再连接,这样最终产生的目标代码是最新的。
图20-16
编译、连接操作
以上操作也可以通过工具栏按钮直接进行。
编译过程中的信息将出现在输出窗口中的构造页中,如果源程序中有语法错误,将提示错误ERROR(S)的类型和行号,双击该行,可以定位到出错的位置。对源程序进行修改没有语法错误后,重新进行编译、连接,编译成功后,最终可得到hex格式的文件(如test.hex),该文件可被编程器读入并写到芯片中,同时还会产生一些其他相关的文件,可被用于Keil C51的仿真与调试。20.4
Keil C51集成开发环境软件的调试方法 20.4.1
常用调试命令
在对工程成功地进行编译(汇编)、连接以后,在主菜单中打开“调试”栏,点击“开始/停止调试模式”,即可进入软件模拟仿真调试状态,Keil C51内建了一个仿真CPU用来模拟执行程序,该仿真CPU功能非常强大,可以在没有硬件和仿真器的情况下进行程序的调试,但是在时序上,软件模拟仿真是达不到硬件的时序的。进入调试状态后,“调试”栏菜单项中原来不能用的命令现在已经可以使用了。“调试”栏菜单上的大部分命令可以在调试界面上找到对应的快捷按钮,从左到右依次是复位、运行、暂停、单步、单步跳过、执行完当前子程序、运行到当前行、下一状态、打开跟踪、观察跟踪、反汇编窗口、观察窗口、代码作用范围分析、1#串行窗口、内存窗口、性能分析、工具按钮等命令(图20-17)。
图20-17
软件模拟仿真调试状态
使用菜单“单步到之外”或相应命令或功能键F10可以用“单步跳过”形式执行命令,所谓“单步跳过”,是指将汇编语言中的子程序或高级语言中的函数作为一个语句一步执行完。使用菜单“单步”或相应的命令按钮或使用快捷键F11可以单步执行程序(即一条一条语句执行),通过单步执行程序,可以找出一些问题的所在,但是仅依靠单步执行来查错效率较低。
20.4.2
断点设置
程序调试时,一些程序行必须满足一定的条件才能被执行到(如程序中某变量达到一定的值、按键被按下、串口接收到数据、有中断产生等),这些条件往往是异步发生或难以预先设定的,这类问题使用单步执行的方法是很难调试的,这时就要使用到程序调试中的另一种非常重要的方法:断点设置。断点设置的方法有多种,常用的是在某一程序行设置断点(图20-18),设置好断点后可以全速运行程序,一旦执行到该程序行即停止,可在此时观察有关变量值,以确定问题所在。在程序行设置/移除断点的方法是将光标定位于需要设置断点的程序行,使用菜单:“调试>设置/取消断点”设置或移除断点,也可以用鼠标在该行双击实现同样的功能;另外“使能/禁止断点”用来开启或暂停光标所在行的断点功能;其它还有“禁止所有断点”、“取消所有断点”等设置。这些功能也可以用工具条上的快捷按钮进行设置。
图20-18
断点设置
20.4.3
在线汇编
在进入Keil C51的调试环境以后,若发现程序有错,可以直接对源程序进行修改,但是要使修改后的代码起作用,必须先退出调试环境,重新进行编译、连接后再次进入调试。如果调试时只是需要对某些程序行进行临时的试验修改(如修改参数以得到所需的延时时间),那么这样的重复过程显得太麻烦,为此Keil C51软件提供了在线汇编的能力。将光标定位于需要修改的程序行上,用菜单“调试>在线汇编”即可出现如图20-19所示的对话框,在“输入新指令”后面的编缉框内直接输入需更改的程序语句,输入完后键入回车将自动指向下一条语句,可以继续修改。如果不再需要修改,可以点击右上角的关闭按钮关闭窗口。
图20-19
在线汇编对话框
20.4.4
程序调试时的常用窗口 Keil C51软件在调试程序时提供了多个窗口,主要包括输出窗口(Output Windows)、查看和呼叫堆栈窗口(Watch & Call Statck Windows)、存储器窗口(Memory Window)、反汇编窗口(Diambly Window)和串行窗口(Serial Window)等。进入调试模式后,可以通过菜单“查看”(View)下的相应命令打开或关闭这些窗口。图20-20是输出窗口、查看和呼叫堆栈观察窗口和存储器窗口,各窗口的大小可以使用鼠标调整。进入调试程序后,输出窗口自动切换到command页。
图20-20
输出窗口、查看和呼叫堆栈窗口和存储器窗口
存储器窗口
存储器窗口中可以显示系统各种内存中的值,通过在“地址”(Addre)后的编缉框内输入“字母:数字”即可显示相应内存值,其中字母可以是C、D、I、X,分别代表代码存储空间、直接寻址的片内存储空间、间接寻址的片内存储空间、扩展的外部RAM空间,数字代表想要查看的地址。例如输入“D:0x20”即可观察到地址20H开始的片内RAM单元值;键入“C:0x100”即可显示从100H开始的ROM单元中的值,即查看程序的二进制代码。该窗口的显示值可以以各种形式显示,如十进制、十六进制、字符型等,改变显示方式的方法是点鼠标右键,在弹出的快捷菜单中选择,该菜单用分隔条分成三部分,其中第一部分与第二部分的三个选项为同一级别,选中第一部分的任一选项,内容将以整数形式显示,而选中第二部分的ASCII项则将以字符型式显示,选中Float项将以相邻四字节组成的浮点数形式显示,选中Double项则将相邻8字节组成双精度形式显示。第一部分又有多个选择项,其中Decimal项是一个开关,如果选中该项,则窗口中的值将以十进制的形式显示,否则按默认的十六进制方式显示。Unsigned和Signed后分别有三个选项:Char、Int、Long分别代表以单字节方式显示、将相邻双字节组成整型数方式显示、将相邻四字节组成长整型方式显示,而Unsigned和Signed则分别代表无符号形式和有符号形式,究竟从哪一个单元开始的相邻单元则与你的设置有关。以整型为例,如果你输入的是“I:0”,那么00H和01H单元的内容将会组成一个整型数,而如果你输入的是“I:1”,01H和02H单元的内容会组成一个整型数,依此类推。第三部分的Modify Memory at X:xx用于更改鼠标处的内存单元值,选中该项即出现如图20-21所示的对话框,可以在对话框内输入要修改的内容。
图20-21
更改内存单元值 工程窗口寄存器页
图20-22是工程窗口寄存器页的内容,寄存器页包括了当前的工作寄存器组和系统寄存器组。系统寄存器组有一些是实际存在的寄存器,如A、B、DPTR、SP、PSW等,有一些是实际中并不存在或虽然存在却不能对其操作的,如PC、States等。每当程序中执行到对其寄存器的操作时,该寄存器会以反色(蓝底白字)显示,用鼠标单击然后按下F2键,即可修改该值。
图20-22
工程窗口寄存器页 查看和呼叫堆栈观察窗口
这也是很重要的一个窗口,工程窗口中不仅可以观察到工作寄存器和有限的寄存器如A、B、DPTR等,如果需要观察其他寄存器的值或者在高级语言编程时需要直接观察变量,还要借助于这个窗口了。
一般情况下,我们仅在单步执行时才对变量值的变化感兴趣,全速运行时,变量的值是不变的,只有在程序停下来之后,才会将这些值的最新变化反映出来。但是,在一些特殊场合我们也可能需要在全速运行时观察变量的变化,此时可以点击查看>定期窗口更新,确认该项处于被选中状态,即可在全速运行时动态地观察有关值的变化。但是,选中该项,将会使程序模拟执行的速度变慢。
Keil C51提供了串行窗口,我们可以直接在串行窗口中键入字符,该字符虽不会被显示出来,但却能传递到仿真CPU中,如果仿真CPU通过串行口发送字符,那么这些字符会在串行窗口显示出来,用该窗口可以在没有硬件的情况下用键盘模拟串口通信。由于该项涉及到高级语言编程,这里就不具体介绍了。
20.5
外围接口工具
为了能够比较直观地了解单片机中定时器、中断、并行端口、串行端门等常用外设的使用情况,Keil C51提供了一些外围接口对话框,通过“外围设备”菜单选择。“外围设备”的下拉菜单内容与你建立项目时所选的CPU有关。如果是选择的89C51这一类单片机,那么将会有Interrupt(中断)、I/O Ports(并行I/O口)、Serial(串行口)、Timer(定时/计数器)这四个外围设备菜单(图20-23)。打开这些对话框,列出了外围设备的当前使用情况,各标志位的情况等,可以在这些对话框中直观地观察和更改各外围设备的运行情况。
图20-23
外围设备菜单 20.5.1
P1□作为输入端□
程序每执行一个循环之前,修改一次P1端口的值(图20-24),观察变量的值是直接观看屏幕右下角的变量表;另外的方法是将鼠标移动到源程序的变量处,等待大约1秒钟左右,屏幕上即可弹出该变量的相关信息。
图20-24
P1□作为输入端□ 20.5.2
P1□作为输出端□
执行循环时观察P1口的输出。由于P1口只用于输出,故无须修改端口值(图20-25)。
图20-25
P1□作为输出端□
20.5.3
外部中断INT0 外部中断INT0对应于P3.2口线,因此,用鼠标单击“外设>Port3”窗口从右向左数第三位(P3.2口线对应的位),每单击一下,即产生一次中断,原因是外部中断是下降沿或低电平有效(图20-26)。
图20-26
外部中断INT0 另外,也可以点击“外设>Interrupt”,在出现图20-27所示中断对话界面后,进行设置。
图20-27
中断对话界面 20.5.4
定时器/计数器0 MCS-51系列单片机有两至三个定时器/计数器,均可以作为定时器或计数器使用。点击“外设>Timer0”即出现图20-28所示定时/计数器0的外围接口界面,可以直接选择Mode组中的下拉列表以确定定时/计数工作方式(0~3四种工作方式,设定定时初值等),点击选中TR0,status后的stop(停止)就变成了run(运行)。如果全速运行程序,此时TH0、TL0后的值也快速地开始变化(要求“定期窗口更新”处于选中状态),直观地演示了定时/计数器的工作情况。
图20-28
定时/计数器0的外围接口界面
第4篇:单片机实验教案
单片机技术实验
教
冯
案
杰
实验一(1)顺序结构程序设计
一、实验目的掌握汇编语言设计和调试方法。熟悉KeilC和Protus仿真软件的使用。
二、实验内容
1、电路如图一所示。将A的内容通过P2口送LED发光二极管显示。
2、修改程序,实现跑马灯的显示效果。
四、实验步骤
1、在计算机某个硬盘中建立项目文件夹。例如“shiyan1”或者“ex1”。
2、启动KEILC程序。
3、打开主菜单中的“project”下的“new project”建立新的项目。按照要求输入项目文件名,例如“shiyan1.prj”。注意:项目应该建立在第一部的文件夹中。
4、打开主菜单中的“file”下的“new file”,建立新的汇编语言文件。录入程序,并将文件命名为“ex1.asm”,存入项目文件夹中。
5、将第四步建立的文件加入到项目中。
6、编译项目文件,查错。
7、启动protus软件,将电路图一输入计算机,并存到项目文件夹中。
8、在protus软件中,使用鼠标左键双击,将第六步编译后所产生的“shiyan1.hex”文件写入到单片机中。
9、在protus软件中运行程序。
10、将A中的内容修改为“0AAH”,重新编译程序,并运行,观察结果。
五、思考
如何用断点方式调试本程序。
ORG 0000H
LJMP START
ORG 0030H START: MOV A,#55H
MOV P1,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
START:
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 党建NZ R7,START1 CJNE R6,#00H,START SJMP $ END
MOV R0,#50H START1:
DEC R0
INC R0 LOOP1:
实验一(3)选择结构程序设计
一、实验目的掌握汇编语言的编程。
二、实验内容
编写程序,根据送入的数据转移运行。
三、程序框图
四、实验步骤
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:
LOOPA: MOV A,#01H LOOPA1:
LOOPB: MOV A,#03H LOOPB1:
LOOPC: MOV A,#07H LOOPC1:
DELAY1S: DELAY1S3: DELAY1S2: DELAY1S1:
LJMP LOOPA LJMP LOOPB LJMP LOOPC MOV P1,A LCALL DELAY1S RL A LJMP LOOPA1 MOV P1,A LCALL DELAY1S RL A LJMP LOOPB1 MOV P1,A LCALL DELAY1S RL A LJMP LOOPC1 MOV R7,#5 MOV R6,#200 MOV R5,#250 党建NZ R5,DELAY1S1 党建NZ R6,DELAY1S2 党建NZ 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显示实验
一、实验要求
利用实验系统提供的显示设备,动态显示一行数据。
二、实验目的⑴了解数码管动态显示的原理; ⑵了解用总线方式控制数码管显示。
三、实验说明
UN2003芯片,是7个带驱动的反相器。8个数码管均为共阴极接法。
四、程序框图
汇编语言参考程序:
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: 党建NZ R6,DELAY2 党建NZ 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: 党建NZ R6,DELAY2 党建NZ 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: 党建NZ R6,DELAY2 党建NZ 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
党建NZ R7, LOOP2 LJMP LOOP SJMP $
DELAY: MOV R6,#2;延时程序 DELAY1: MOV R5,#10 DELAY2: MOV R4,#100 DELAY3: 党建NZ R4,DELAY3 党建NZ R5,DELAY2 党建NZ 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 EQU 30H;第一参数单元 DAT2 EQU 31H;第二参数单元 COM EQU 32H;指令代码单元 C_ADD EQU 0100H;指令通道地址 D_ADD EQU 0000H;数据通道地址
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
党建NZ R7,DELY1;上电延时
党建NZ 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 R7,#5 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,#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
22 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 T_05: RETI T_1: CLR TR1
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 INT_12: clr P1.0
setb P1.1
LJMP INT_19 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: 党建NZ R3,L3 党建NZ R2,L2 党建NZ R1,L1 RET TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH;显示程序查表,共阴 END
第5篇:单片机实验教案
单片机技术实验
教
案
冯
杰
1 实验一(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中内容是否按从
3 小到大排列。
五、思考:修改程序把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 党建NZ 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、0
1、0
2、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 党建NZ R5,DELAY1S1 党建NZ R6,DELAY1S2 党建NZ 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
8 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: 党建NZ R6,DELAY2 党建NZ 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: 党建NZ R6,DELAY2 党建NZ 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: 党建NZ R6,DELAY2 党建NZ 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 党建NZ R7, LOOP2 LJMP LOOP SJMP $
DELAY: MOV R6,#2;延时程序 DELAY1: MOV R5,#10 DELAY2: MOV R4,#100 DELAY3: 党建NZ R4,DELAY3 党建NZ R5,DELAY2 党建NZ 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
18 党建NZ R7,DELY1;上电延时
党建NZ 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;写入操作
19 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单元中装入待显示的字符码
20 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
22 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
27 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: 党建NZ R3,L3 党建NZ R2,L2 党建NZ R1,L1 RET TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH;显示程序查表,共阴 END
第6篇:单片机课程设计教案
《单片机技术及其应用》课程设计教案
一、课程设计的目的课程设计是在学完《单片机原理及接口技术》课程之后综合利用所学单片机知识完成一个单片机应用系统设计并在实验室实现,从而加深对单片机软硬知识的理解,获得初步的应用经验,为走出校门从事单片机应用的相关工作打下基础.1.了解并掌握单片机的原理、结构、指令、接口及应用。2.提高综合运用所学的理论知识独立分析和解决问题的能力。3.掌握汇编语言程序设计和调试。4.掌握C51语言的设计和调试。
二、课程设计的要求
1. 根据设计要求,画出硬件接线图及程序的总体流程图,然后进行各控制模块的硬件设计及软件设计。
2.掌握如何应用单片机仿真器来开发应用系统及仿真调试的过程。
三、课程设计的安排
1.时间安排,课程设计时间分为三个阶段:
第一阶段(8学时):主要是学生接受课程设计的准备阶段。包括: 1)学生集中介绍课程设计的具体内容和具体要求,学生选题。(4学时)
2)安排学生收集相关资料,确定课程设计的总体方案。(4学时)第二阶段(20学时):主要是学生具体课程设计的过程。包括:
学生做的工作
1)确定电路中使用的电子元器件(包括元件名称和及参数值)
2)软件设计与仿真(画出软件流程图,并编写具体的代码)老师做的工作
1)辅导学生解决在制作过程中出现的问题 2)协助学生购买设计中需要的电子元器件 3)辅导学生焊接电路板和相关元器件 4)辅导学生完成程序的烧写和硬件测试
提供烧写器给学生,由学生能够进行软件仿真调试程序。学生在焊接完毕后,将程序下载到主芯片里并测试电路。由辅导老师辅导学生调试硬件和软件部分,共同解决测试过程中出现的问题,使学生在测试过程进一步学习。
第三阶段(8学时):主要是文档资料整理和答辩 1)安排学生交课程设计报告并总结
2)每组随机抽取3个人进行答辩,取平均成绩作为小组每个人的答辩成绩
课程设计结束后,将学生的设计的实物做课程设计汇报,在实验中心1楼做一个展览。
2.分组安排
学生可以自由组合,3-6名学生成立一个小课题组,选一名组长,确定课题后由组长进行分工。3.课题选择
以小组为单位,一组选择一个课题,可以自己选定题目,也可以在指导教师提供的课题中选择。
四、可供选择的课题
1、抢答器的设计
技术要求:以拔动开关K0—K5中的某个丌关为0N作为抢答按键,无人抢答时,6个数码管循环轮流显示1—6跑马,谁先抢答,数码管停止跑马,6个数码管同时亮谁的编号,其后再有键按下,系统不予响应,直到此位拔为OFF,恢复l—6跑了马,开始下一轮抢答。
2、波形发生器的设计
技术要求:可以产生正弦波、方波、三角波等常用标准波形,由按键选择并用不同符号显示在数码管上。
3、简易电子琴设计
技术要求:由16个按键组成4X4键盘矩阵,设置成16个音,可随意弹奏想要表现的音乐。
4、秒表设计
技术要求:开始时,显示“00”,第一次按下按钮后开始从0-99s计时,显示精度为1s;对用有4个功能按键,第1个按键开始按钮,第2个按键停止按钮,第3个按键及时归零按钮,第4个按钮复位按钮。
5、ADC0808 A/D转换设计
技术要求:用ADC0808对模拟信号进行转换,转换结果送7段数码管显示,同时用发光二极管显示转换值的二进制码。5位数码管的前两位显示“AD”。字样,后三位显示A/D转换结果,采用串行显示方法。
6、温度采集报警系统的设计
技术要求:可以显示被测的温度并存储,可以设置报警温度,到达报警温度时声光报警。
7、数字频率计的设计
技术要求:利用单片机的定时器和计数器实现对方波信号的频率测
量,用数码管显示出来。
8、模拟计算器数字输入显示系统设计
技术要求:开机时,显示“0”。第一次按下数字键时,显示“D1”;第二次按下时,显示“D1D2”,第三次按下时,显示“D1D2D3”8个数字完全显示完,再按下按键时,发出“滴”提示音,并返回初始显示状态。
9、数字钟设计
技术要求:利用单片机的定时器和数码管,设计一个电子时钟,显示格式为“XX:XX:XX”,由左向右分别是时、分、秒。开机时,显示00:00:00的时间开始计时;当时间不准时,可校时,P0.0控制“秒”的调整,每按一次加1s;P0.1控制“分”的调整,每按一次加1min;P2.0控制“时”的调整,每按一次加1h。计时满23:59:59时,返回00:00:00重新计时。
10、模拟交通灯的设计
技术要求:单片机的并行口接发光二极管,模拟交通灯的变化规律。首先,东西路口红灯亮,南北路口绿灯亮,同时开始25秒倒计时,以7段数码管显示时间。25秒倒计时结束后开始5秒倒计时,南北路口的绿灯闪烁,计时到最后2秒时,南北路口黄灯亮。完成一次这样的循环需要30秒。30秒结束后,南北路口红灯亮,东西路口绿灯亮,并重新30秒倒计时,依次循环。
五、课程设计成绩评定方法
满分100分;平时成绩占10分;报告占20分;完成情况占30分;答辩占40分。
第7篇:单片机实训教案
苏州经贸职业技术学院
实训项目1 报警器控制
一、项目要求
调研实际报警器的使用,设计一个应用开关控制报警器发声报警。
二、项目实践技能目标
1.通过项目的训练,锻炼理论联系实际的能力,熟练掌握单片机控制系统,掌握单片机的定时器的技术等知识。
2.掌握C语言或汇编语言。掌握软件延时或定时器延时程序的设计。
3.根据设计要求,在PROTUES开发平台上,完成硬件系统的电路组装,完成系统软件设计要求,并提交程序设计框图和程序清单;完成系统软硬件的综合调试,实现设计要求。
4.通过该项目的训练,提高学生的实际动手操作能力,养成学生的工程道德观念,建立工程敬业精神和团队合作精神。
三、参考电路
苏州经贸职业技术学院
实训项目2 简易音乐播放器设计
一、项目要求
1、用一个按键实现选定播放的音乐段,在播放的过程中可用此按键暂停;
2、用另一个按键选择待播放的几段音乐中的一段;
3、选择的曲目可以在数码管上显示。
二、项目实践技能目标
1、通过该项目的训练巩固单片机定时器技术、中断技术的应用;
2、学会C语言中二维数组的使用,学习音乐索引和节拍的设计,学习通过每个高脉冲或低脉冲的延时形成某种频率的声音输出方法,学习控制每个不同频率声音输出的时间长短形成节拍的方法,学习高低音的方法等。
3、根据设计要求,在PROTUES开发平台上,完成硬件系统的电路组装,完成系统软件设计要求,并提交程序设计框图和程序清单;完成系统软硬件的综合调试,实现设计要求。
4、通过该项目的训练,提高学生的实际动手操作能力,养成学生的工程道德观念,建立工程敬业精神和团队合作精神。
三、参考电路
四、思考题
苏州经贸职业技术学院
设计一个音乐门铃。
实训项目3 单片机之间双向通信
一、项目要求
两片单片机工作于串口模式1,整个系统实现双机双向通信;
工作任务:
1.甲机的K1按键可通过串口分别控制乙机的LED1点亮,LED2点亮,LED1和LED2全亮或全灭.2.乙机按键可向甲机发送数字,甲机接收上午数字显示在其P0端口的数码管上。
应用软件完成硬件电路的设计并实现电气意义;完成软件设计;并实现仿真调试或实物调试。
二、项目实践技能目标
1.通过实际项目,来理解和掌握串行通信基本知识,串行口及应用技术等知识。2.根据设计要求,在PROTUES开发平台上,完成硬件系统的电路组装,完成系统软件设计要求,并提交程序设计框图和程序清单;完成系统软硬件的综合调试,实现设计要求。
3.通过该项目的训练,提高学生的实际动手操作能力,养成学生的工程道德观念,建立工程敬业精神和团队合作精神。
4.核心技能教学目标:培养学生的对于通信的概念理解和掌握,在教学中注意引导学生自己提出问题,分析问题,培养他们独立解决问题的能力,培养学生融合课程间知识的相关联系能力,以及外语能力和再学习能力,并培养学生质疑精神。
5.考核标准:单片机串行通信基本知识;串行口及应用技术的基本知识30%;硬件连接及PROTUES使用10%;软件设计20%;系统调试20%;回答问题10%;创新能力(在原有基础上有能力拓展)10%。
三、参考电路
苏州经贸职业技术学院
四、思考题
1.如何实现双工通信?试编写通讯程序。
2.如何利用中断方式实现串行通讯?试编写通讯程序。
实训项目4
8*8LED点阵屏显示数据
一、项目要求
8*8LED点阵屏循环显示数字0~9; 刷新过程由定时器中断完成。
二、项目实践技能目标
1.通过项目的训练,掌握点阵屏的结构以及与单片机的接口技术;掌握点阵屏形成的字符编码。
2.根据设计要求,在PROTUES开发平台上,完成硬件系统的电路组装,完成系统软件设计要求,并提交程序设计框图和程序清单;完成系统软硬件的综合调试,实现设计要求。
苏州经贸职业技术学院
3.通过该项目的训练,提高学生的实际动手操作能力,养成学生的工程道德观念,建立工程敬业精神和团队合作精神。
三、基础知识点
LED显示屏是将发光二极管按行按列布置的,驱动时也就按行按列驱动。在扫描驱动方式下可以按行扫描按列控制,当然也可以按列扫描按行控制。LED显示屏现多采用多块8X8点阵显示单元拼接而成。8X8点阵LED结构如图其等效电路如图所示,8X8点阵LED结构图
从图中可以看出,8X8点阵共需要64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上。要实现显示图形或字体,只需考虑其显示方式,通过编程控制各显示点对应LED阳极和阴极端的电平,就可以有效的控制各显示点的亮灭。当采用按行扫描按列控制的驱动方式时,LED显示屏8行的同名列共用一套列驱动器。行驱动器一行的行线连接到电源的一端,列驱动器一列的列线连接到电源的另一端。应用时还应在各条行线或列线上接上限流电阻。扫描中控制电路将行线的1到 8轮流接通高电位,使连接到各该行的全部LED器件接通正电源,但具体那一个LED导通,还要看它的负电源是否接通,这就是列控制的任务了。当对应的某一列置0电平,则相应的二极管就亮;反之则不亮。例如:如果想使屏幕左上角LED点亮,左下角LED熄灭的话,在扫描到第一行时,第8X8点阵LED等效电路图
一列的电位就应该为低,而扫描到第八行时第一列的电位就应该为高。这样行线上一行一行的轮流导通,列线上进行通断控制,实现了行扫描列控制的驱动方式。
0x00,0x3C,0x66,0x42,0x42,0x66,0x3C,0x00 显示0 0x00,0x08,0x38,0x08,0x08,0x88,0x3E,0x00 显示1 0x00,0x3C,0x42,0x04,0x08,0x32,0x7E,0x00 显示2 0x00,0x3C,0x42,0x1C,0x02,0x42,0x3C,0x00 显示3 0x00,0x0C,0x14,0x24,0x44,0x3C,0x0C,0x00 显示4 0x00,0x7E,0x40,0x7C,0x02,0x42,0x3C,0x00 显示5 0x00,0x3C,0x40,0x7C,0x42,0x42,0x3C,0x00 显示6 0x00,0x7E,0x44,0x08,0x10,0x10,0x10,0x00 显示7 0x00,0x3C,0x42,0x24,0x5C,0x42,0x3C,0x00 显示8 苏州经贸职业技术学院
0x00,0x38,0x46,0x42,0x3E,0x06,0x3C,0x00 显示9
四、参考电路
五、思考题
1.完整显示一个汉字需要几个8*8LED点阵屏?汉字的编码怎样形成?试编写汉字显示程序。
实训项目5 ADC0809 实现输出PWM波形
一、项目要求
调节ADC0809(ADC0808)芯片的0通道输入的可变电阻器,从而实现控制输出脉冲的占空比变化(0%~100%),从而实现脉冲宽度调制(PWM)。
二、项目实践技能目标
1.通过项目的训练,理解数据采集技术;
2.学会A/D转换器的结构和原理,及与单片机的接口技术,掌握软件设计技术。3.巩固单片机基础知识点。
苏州经贸职业技术学院
4.根据设计要求,在PROTUES开发平台上,完成硬件系统的电路组装,完成系统软件设计要求,并提交程序设计框图和程序清单;完成系统软硬件的综合调试,实现设计要求。
三、参考电路
4.思考题
对于代码中两个if语句,如果去掉这几句语句,观察一下示波器的输出波形,读者思考两个if语句有什么作用?如果不用中断子程序提供时钟信号,如何实现该功能?
实训项目6
数字波形信号的合成技术
一、项目要求
利用数字波形信号的合成技术来生成正弦波。
二、程序设计思路和实现过程
数字波形合成技术是一个斜升波的合成过程,它根据已设定的输出波形参数,先由CPU算出输出波形数据并存入ROM中,再将输出波形在采样点的ROM中的数字值依次通过D/A转换器转换为模拟量输出。要采用数字波形合成技术产生工频正弦信号,可预 苏州经贸职业技术学院
先将一个周期的正弦信号分成K个点,经计算求得各点的幅值并数字量化后存于RAM(或程序的数组)中。若需输出波形时,按照一定的频率从RAM中取出每点的量化值送D/A,D/A就可恢复原来一个周期的完整正弦波信号,经过连续的循环即可得到连续的正弦信号输出。
工频信号的输出频率可由式fout=fc/K确定,其中fc为采样(取点)频率,K为一周期所分割的点数。本设计中为了使相位设置方便,把正弦波每周期分成了180个点,所以K=180,那么在K不变的情况下,可以通过改变采样频率fc,就可改变输出频率值。程序设计过程类似于锯齿波的产生设计过程,关键是每点的D/A值的确定。
三、项目实践技能目标
1.通过项目的训练,理解数据采集技术;
2.学会D/A转换器的结构和原理,及与单片机的接口技术,掌握软件设计技术。3.巩固单片机基础知识点。
4.根据设计要求,在PROTUES开发平台上,完成硬件系统的电路组装,完成系统软件设计要求,并提交程序设计框图和程序清单;完成系统软硬件的综合调试,实现设计要求。
三、参考电路
RP110k1U119XTAL1P0.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/RD*********617S1S2S1123D34D25D16D07VREF8910D0D1D2D3D4D5D6D72019***3121123456789R4RV11k100%+12ABVREFCD18XTAL29RSTU210kS2D4D5D6D7238R51k293031PSENALEEA12345678P1.0/T2P1.1/T2EXP1.2P1.3P1.4P1.5P1.6P1.7AT89C52CSVCCWR1ILE(BY1/BY2)GNDWR2DI3XFERDI2DI4DI1DI5DI0DI6VREFDI7RFBIOUT2GNDIOUT1DAC0832R2-1215kR315k4U3:A1TL0824R17.5k658U3:B7TL082+12 图7-1 数字波形信号的合成技术仿真电路图
苏州经贸职业技术学院
图7-2 输出的三角波和正弦波信号
四、思考题
(1)对于代码中提供的正弦信号sine_tab[256] 数组是如何确定的?如果要频率提高一倍,如何重新确定数组?
(2)修改程序,使之能输出三角波。
(3)程序对应的仿真电路图如图7-1所示;相应的运行结果如图7-2所示。
实训项目7 利用LCD1602设计的可调式电子钟
一、项目要求
利用单片机的定时器控制时钟运行,运行过程中的误差,通过K1~K4键进行调节; K1键用来选择调节时/分,K2键与K3键用于增减当前的小时或分钟,调整完成后按下K4键确定,电子钟继续运行;
利用LCD1602显示电子日历与时钟。
二、项目实践技能目标
1.通过项目的训练,理解LCD1602芯片的结构和原理,及与单片机的接口技术,掌握 苏州经贸职业技术学院
LCD忙检测、初始化、设置位置、写命令、写数据函数等的软件设计。2.掌握利用单片机的定时器实现时钟功能。
3.根据设计要求,在PROTUES开发平台上,完成硬件系统的电路组装,完成系统软件设计要求,并提交程序设计框图和程序清单;完成系统软硬件的综合调试,实现设计要求。
4.通过该项目的训练,提高学生的实际动手操作能力,养成学生的工程道德观念,建立工程敬业精神和团队合作精神。
三、参考电路
五、思考题
1.利用时钟芯片DS1302实现可调式电子表,完成软硬件的设计。
实训项目8
16*16点阵屏设计
一、项目要求
利用单片机控制实现16*16点阵屏的汉字滚动显示
二、项目实践技能目标
1、巩固8*8点阵屏的知识点,学习实现一个汉字需要4片8*8点阵屏的硬件知识点,以及实现汉字点阵的数组知识。
2、掌握单片机扩展原理,加强芯片的认知能力、以及使用能力。
苏州经贸职业技术学院
3、掌握软件设计的技巧和方法。
4、根据设计要求,在PROTUES开发平台上,完成硬件系统的电路组装,完成系统软件设计要求,并提交程序设计框图和程序清单;完成系统软硬件的综合调试,实现设计要求。
5、通过该项目的训练,提高学生的实际动手操作能力,养成学生的工程道德观念,建立工程敬业精神和团队合作精神。
三、参考电路
苏州经贸职业技术学院
四、思考题
实现多个汉字滚动显示,怎样完成?
实训项目9
计算器的设计
一、项目要求
利用单片机控制系统实现单行液晶显示的计算器。
二、项目实践技能目标
1、巩固单片机的硬件系统知识,熟练掌握单片机的指令系统以及软件设计方法。
2、练习并行扩展存储单元的原理
3、根据设计要求,在PROTUES开发平台上,完成硬件系统的电路组装,完成系统软件设计要求,并提交程序设计框图和程序清单;完成系统软硬件的综合调试,实现设计要求。
4、通过该项目的训练,提高学生的实际动手操作能力,养成学生的工程道德观念,建立工程敬业精神和团队合作精神。
苏州经贸职业技术学院
三、参考电路
四、思考题
1、重新修改代码,使计算器实现保留两位小数精度的数值计算
2、设计一部电子秤
第8篇:《人琴俱亡》教案模板学习目标:
1、疏通文意,明确文言实词、虚词在文中的意思。
2、感受文章的内容,体会人物的心情和个性特点,感受兄弟亲情。
一、课堂学习
1、你认为课文中哪些语句最能表达子猷与子敬的兄弟之情?“弦既不调”说明了什么,你理解“人琴俱亡”的含义了吗?
2、王子猷是一个怎样的人?你喜欢这个人物吗?
3、课文描写子猷先是“了不悲” “都不哭”,后又写他“恸绝良久”,他前后的表现是否矛盾?为什么?
二、课外拓展:结合材料探究魏晋风度
材料一:《伤逝十二》郗嘉宾(郗超)丧,左右白郗公:“郎 丧”既闻不悲,因语左右:“殡时可道。”公往临殡,一恸几绝。
材料二:《雅量谢公》东晋名相谢安的侄子在前线与八十万秦兵作战,这一战关乎国家危亡,大胜后派人急来报捷。谢安当时正与客人下棋,看完后若无其事的继续与客人慢慢下棋,客人问起也只淡淡地说小儿辈破大敌了。——这一战关系到国之兴亡、家之存绝,谢安不可能真的无动于衷,只是越是激动的重要时刻越平静,才是超脱的风度。
明确:《人琴俱亡》是《世说新语伤逝》第十六篇,结合其余十八篇来看,《人琴俱亡》作为其中一篇还是较为集中的体现了魏晋时期文人士大夫的某种思想性格特点及其文化特征——在任由性情、不拘矩度、注重情感的个性表达的同时,还故作旷达追求一种超脱的风度,魏晋风度。所以子猷的不悲不哭正好体现了魏晋时代士人独特的思想情感追求——他们注重真性情,追求个性的自由飞扬,同时又力求能摆脱世俗的一切利害得失、荣辱毁誉,寻求一种超然的风度。为此,尽管子敬很悲痛,却还是要强自抑制。
二、课后学习:阅读下面的文言文,完成题目。
(甲)王子猷、子敬俱病笃,而子敬先亡。子猷问左右:“何以都不闻消息?此已丧矣。”语时了不悲。便索舆来奔丧,都不哭。
子敬素好琴,便径入坐灵床上,取子敬琴弹,弦既不调,掷地云:“子敬子敬,人琴俱亡。”因恸绝良久。月余亦卒。
(乙)魏武将见匈奴使,自以形陋,不足雄远国,使崔季硅代,帝自捉刀立床头。既毕,令间谍问曰:“魏王如何?”匈奴使答曰:“魏王雅望非常;然床头捉刀人,此乃英雄也。”魏武闻之,追杀此使。
1、给下列字注音
猷()笃()恸()舆()
2、解释加点词的含义。
王子猷、子敬俱病笃()()子敬素好琴()
何以都不闻消息()()此乃英雄也()
3、用现代汉语疏通下列句子的意思,加点字的意思要力求译准。
(1)语时了不悲。
译文:____________________________________________________________
(2)便索舆来奔丧。
译文:____________________________________________________________
(3)便径入坐灵床上。
译文:____________________________________________________________
(4)因恸绝良久,月余亦卒。
译文:____________________________________________________________
4、曹植有一首《七步诗》,和(甲)文都是写 的,请你把它工整地写在下面。
5、(甲)(乙)两文都选自《世说新语》,(乙)文中的魏武就是曹操。文中的他是怎样的形象?
第9篇:(第1章)单片机教案
§1概论
§1.1 单片机特点及发展概况
一、什么是单片机
二、单片机的特点
三、单片机的应用
四、单片机的发展概况
§1.2 常用8位单片机系列介绍
一、Zilog公司Z8系列单片机
二、Motorola公司M6800系列单片机
三、51系列单片机
a)Intel公司MCS
51、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的分区
作业:
1 AT89C51单片机片内包含那些主要逻辑功能部件。2 51系列单片机的EA端子有何用途。3 简答51系列单片机存贮器的4个物理空间和3个逻辑空间,如何访问不同的存贮空间。
4 简述51系列单片机片内RAM的空间分配。
§2.3 51系列单片机并行I/O端口结构
一、P1口结构及功能
Ucc5V内部读锁存器信号缓冲器50k内部DBDQ锁存器MOS电子开关内部写信号CPQT1P1.XX0~7缓冲器内部读引脚信号P1口线内部结构图2
功能:准双向I/O口
作输入之前要先输出1,断开下拉电子开关
有读锁存器功能,可防止误读
拉电流能力:
二、P2口结构及功能 功能:准双向I/O口
作输入之前要先输出1,断开下拉电子开关
有读锁存器功能,可防止误读
拉电流能力:
内部读锁存器信号缓冲器内部控制信号内部地址信号Ucc5V50k内部DBDQ锁存器单刀双掷电子开关内部写信号MOS电子开关T1反相器P2.XX0~7CPQ缓冲器内部读引脚信号P2口线内部结构
图3
三、P3口结构及功能
功能:准双向I/O口
作输入之前要先输出1,断开下拉电子开关
有读锁存器功能,可防止误读
拉电流能力:
Ucc5V内部读锁存器信号缓冲器第二输出功能50k内部DBDQ锁存器内部写信号MOS电子开关T1P3.XX0~7CPQ缓冲器与非门内部读引脚信号第二输入功能P3口线内部结构
图4
四、P0口结构及功能
功能:1.准双向I/O口 2.数据总线
3.低8位地址总线A7~0
内部读锁存器信号缓冲器地址/数据控制Ucc5V与门T1内部DBDQMOS电子开关T2锁存器P0.XX0~7内部写信号CPQ单刀双掷电子开关缓冲器内部读引脚信号控制0:与门被封锁,电子开关下掷,T1截止,作开漏口线控制1:与门敞开,电子开关上掷,作地址/数据线P0口线内部结构图5
明确某口线作输入之前要先输出1—准双向含义 知道P0、P
2、P3口线的第二功能
明确P
1、P
2、P3口线内部有约50k的上拉电阻
知道NMOS电子开关的特性:栅极接受高电平时导通; 接受低电平时断开。
§2.4 51系列单片机时序和复位
一、晶振频率fosc
fosc6MHz,11.0592
S1MHz,12MHz
S4S5S6S2S3foscP1P251系列单片机振荡频率及时钟频率发生器石英晶体C2二分频器振荡器C1
图6
二、时钟频率P、时钟周期(状态周期)
fP1fP20.5fosc,fP1与fP2错开180。时钟频率的倒数称为时钟周期,也叫。
三、机器周期
六个状态周期组成一个。
四、指令周期
机器周期是指令周期的基本单位。
就是说,1个指令周期最少包括1个机器周期。
按照包括机器周期的个数,实际指令周期分为单周期、1,P2双周期和四周期共三种。
总结
建立晶振频率、时钟频率、时钟周期、机器周期、指令周期等概念
知道晶振频率二分频为两相时钟频率; 知道一个机器周期包括两个时钟周期;
知道一个指令周期包括1个、2个或4个机器周期; 知道51系列单片机使用了指令交叉执行技术,即在当前指令尚未执行完毕前已经开始下一条指令的取指操作。所以51系列单片机很多指令长度为双字节,但执行时间为单周期。大大提高了工作速度。
§2.5 51系列单片机的复位
一、复位要求
给Reset引脚一个脉宽不小于2个机周的正脉冲 例:晶振频率fosc=12MHz时,机器周期T1s,则要求加在Reset引脚的脉宽不小于2s。
在正脉冲期间,单片机完成复位任务,使有关的寄存器、计数器等成为特定状态。
正脉冲结束时,单片机开始执行程序。Button5VR11kC1F9AT89C51ResetR10kUR5V2Vot1t
图7 复位电路
二、复位方法
uc(0)0 uc()5V
按照三要素法
uc(t)uc()[uc(0)uc()]et/
代入uc(0)0和uc()5V有
uc(t)5(1et/)V
电阻R上的电压即AT89C51单片机Reset引线的输入电压为
uR(t)5Vuc(t)5et/V
在刚上电时,uR(t)5V。随着时间进行,uR(t)要按照负指数曲线下降。当下降到uR(t1)2V时,高电平变为低电平,单片机开始执行程序。t1就是有效复位时间。令 uR(t1)5et/1t/1V2V
由此求出
e2.5
t1ln2.5
例:晶振频率fosc=12MHz时,机器周期T在Reset引脚的脉宽t12s,则有
21061s,要求加s
若电阻RC210101010k,则可求出电容值
6321010F200pF
为保险起见,通常取电容C=1F。
电阻R2以电容放电不过快为宜,通常取R11k。
三、复位影响
除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
第10篇:单片机分支程序设计教案
一、复习上次课内容
1、什么是标识符?
答:标识符是程序员选择的名字,用来标识常量、变量、过程、段名等。
2、什么是伪指令?
答:注释性的,没有对应的机器码,不令计算机做任何操作,不产生目
标程序,不影响程序的执行。
二、讲授新课
4.3分支程序设计
在很多实际问题中,都需要根据不同的情况进行不同的处理。这种
思想体现在程序设计中,就是根据不同条件而转到不同的程序段去执行,这就构成了分支程序。分支程序的结构有两种,如图4.2所示。
图4.2 分支程序结构
图4.2(a)结构使用条件转移指令来实现分支,当给出的条件成立时,执行程序段A,否则执行程序段B。
图4.2(b)结构使用散转指令JMP来实现多分支转移,它首先将分支程序按序号的值来实现分支转移。
分支程序的特点是改变程序的执行顺序,跳过一些指令,去执行另外一些指令。应注意:对每一个分支都要单独编写一段程序,每一分支的开始地址赋给一个标号。
在编写分支程序时,关键是如何判断分支的条件。在MCS-51系列单片机中可以直接用来判断分支条件的指令并不多,只有累加器为零(或不为零)、比较条件转移指令CJNE等,MCS-51单片机还提供了位条件转移指令,如JC,JB等。把这些指令结合在一起使用,就可以完成各种各样的条件判断。
【例4-5】设补码X放在内部RAM30H单元中,函数Y与X有如下的关系式:
试编写程序,根据X的值求出Y,并放回原单元。
解 取出X后先做取值范围的判断,用累加器A状态转移指令判断X是否为0,用位状态转移指令判断X是大于0还是小于0。程序流程图如图4.3所示。
程序如下:
MOV A,30H JZ ZER0 JNB ACC.7,PLUS
ADD A,#5 MOV 30H,A PLUS: SJMP $ ZERO: MOV 30H,#20H SJMP $ END 【例4-6】内部RAM40H和41H单元中各有一无符号数,比较其大小,将大数存放于内部RAM60H单元,小数存放于内部RAM61H单元,如两数相等,则分别送往这2个单元。
解 用比较不等转移指令CJNE比较力两个无符号书,先确定它们是否相等,若不相等时再根据借位标志确定这两个无符号书的大小。程序框图如图4.4所示。程序如下:
LOOP:
AGEQ:
SJMP END $
XCH MOV A,61H 60H,A
;A<(41H)有借位
;A与(61H)交换 MOV MOV CJNE AJMP JNC A,40H 61H,41H A,41H,LOOP AGEQ AGEQ
;A≥(41H)则无借位
【例4-8】将ASCII码制转换为十六进制数。如果不是十六进制数得ASCII码,用户标志位置1。解:由ASCII码表知,30H~39H为0~9的ASCII码,41H~46H为A~F的ASCII码。在这一范围的ASCII码减去37H就可以获得对应的十六进制。设ASCII码放在累加器A中,转换结果放回A中。程序流程图如图4.5所示
三、课堂巩固
四、课堂小结
五、作业
第11篇:单片机
µ¥Æ¬»ú¶¨Ê±Æ÷c³ÐĞò
2010-07-06 ***304?|?·ÖÀࣺÆäËû±à³ÌÓïÑÔ?|?ä¯ÀÀ3903´Î ÎÒÏëʵÏÖÒ»¸ö´øĞβεĶ¨Ê±Æ÷³ÐĞò£¬º¯ÊıÃûΪdelay_s(uchar t)£¬ÒªÇóÑÓʱtÃ룬Óö¨Ê±Æ÷t0£¬Ä£Ê½1¹¤×÷·½Ê½
·ÖÏíµ½£º
2010-07-20 21:07ÌáÎÊÕß²ÉÄÉ
//-------------------
// º¯ÊıÃû³Æ£º void delay_s(uchar t)
// º¯Êı¹¦ÄÜ£º ÀûÑö¨Ê±Æ÷ÑÑʱtÃë×ѳÐĞò
//-------------------
delay_s(uchar t)
{
uchar count,a;
TMOD=0x10;//¶¨Ê±Æ÷1£¬Ä£Ê½1
TH0=(65536-50000)/256;// ¶¨Ê±Îª50ms
TL0=(65536-50000)%256;
EA=1;
ET1=1;
TR1=1;
while(1)
{
if(a==t)break;
}
}
void timer1()interrupt 3//¶¨Ê±Æ÷1
{
TR1=0;
TH1=(65536-50000)/256;// ¶¨Ê±Îª50ms
TL1=(65536-50000)%256;
count++;
if(count==20)//ÅжÏÊÆ·ñµ´1Ãë
{
count=0;
a++;
}
TR1=1;
}
第12篇:单片机
PLC电路在备用自动投入中
PLC在变电站变压器自动化中的实现
VHDL电路设计
变频恒压供水控制系统的研究
超声波测距模块的设计
车辆牌照图像识别算法研究与实现
城市交通决策支持系统
出租车计费系统的设计
串口通信控制器
串口通讯-
单片机程序控制语音播放
单片机串行通信发射部分设计
单片机的多功能智能小车
单片机的数字钟设计
单片机的智能电源管理系统
单片机精确计时的电源开关
单片机课程设计__电子密码锁报告
单片机课程设计-交通灯
单片机控制步进电机
单片机软件喂狗方式和硬件喂狗方式的比较
单片机实现的步进电机控制系统设计(论文+DWG图纸+外文翻译+任务书+文献综述)单片机实现温度远程显示
单片机小系统板安装实习报告
单片机作息时间控制
电力电子技术在绿色照明电路中的应用
电力电子技术在绿色照明电路中的应用
电力线载波调制解调器设计
电气火灾自动保护型断路器的设计
电梯升降的PLC控制设计
基于PLC的液位控制系统的设计(论文+外文翻译+开题报告+文献综述)
基于单片机的多功能转速表(论文+DWG图纸+开题报告+外文翻译+英文文献)某小区的智能化系统设计(论文+DWG图纸+开题报告+文献综述)
全数字化双闭环可逆直流PWM调速系统的研究(论文+DWG图纸+外文翻译+任务书+文献综述)
第13篇:单片机
1.主机开发板一套(配齐板上所有元件)。
2.9孔对9孔串口通讯电缆一条(兼程序下载线)。
3.USB电缆线两条,一条为下载线,另一条为电源线。
4.1602字符液晶一块(只能显示数字和英文,不能显示汉字)。
5.光盘两张DVD(内附天祥老师13讲40小时高清视频教程及开发板全套资料)。
6.SST89E516单片机仿真芯片一块。
7.天祥电子彩色宣传册一本。
8.固定电路板支撑柱4个。
9.我公司正规机打出库单据一张,客户认证序列号条形码(板底贴好)。
10.精美包装盒。
GTX TX-1C扩展板是天祥电子在TX-1C 51单片机学习板基础上开发的扩展学习板,补充了TX-1C学习板欠缺的功能,主要集成了以下功能模块和扩展接口:
1.红外接收模块;(可学习用遥控器无线控制功能)
2.DS1302实时时钟模块;(可学习时钟功能)
3.DS12C887实时时钟模块;(可实现TX-1C学习板配套视频中时钟实验)
4.8×8点阵模块;(可学习点阵的静态显示与动态显示功能)
5.继电器模块;(可学习继电器控制功能)
6.直流电机接口;(可学习TX-1C学习板配套书籍《新概念51单片机C语言教程》中电机实验)
7.步进电机接口(5/6线);(可学习TX-1C学习板配套书籍《新概念51单片机C语言教程》中电机实验)
8.舵机接口;(可学习TX-1C学习板配套书籍《新概念51单片机C语言教程》中舵机实验)
9.TX4432无线模块接口;(可学习433M无线数据传输功能)
10.超声波模块接口;(可学习超声波测距功能)
11.电源扩展(5V、3.3V、GND)接口;
12.四个独立按键扩展接口;
13.40P STC系列单片机最小系统接口,IO口全部引出;(此接口可以用来安装STC 40P直插封装的各种单片机,所有IO口均独立引出,可通过杜邦线连接TX-1C板下载程序或连接扩展板上其它模块完成实验)
版权声明:
1.大文斗范文网的资料来自互联网以及用户的投稿,用于非商业性学习目的免费阅览。
2.《单片机教案模板(共13篇)》一文的著作权归原作者所有,仅供学习参考,转载或引用时请保留版权信息。
3.如果本网所转载内容不慎侵犯了您的权益,请联系我们,我们将会及时删除。
