高级电工单片机实操教程Word格式.docx
- 文档编号:21479826
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:35
- 大小:398.67KB
高级电工单片机实操教程Word格式.docx
《高级电工单片机实操教程Word格式.docx》由会员分享,可在线阅读,更多相关《高级电工单片机实操教程Word格式.docx(35页珍藏版)》请在冰豆网上搜索。
电路图:
电路工作原理:
白天光敏电阻阻值小,使P3.2输入电位为高电平,不产生中断,使LED灭。
晚上光敏电阻阻值变大,使P3.2的输入电位为低电平,这时产生中断,中断使LED闪烁。
只要是在晚上要求LED一直闪烁。
所以中断应该采用电平触发方式。
调试方法:
接好电路,编好程序,使光敏电阻暴露在光线下,调节Rp到最小值,这时LED应该闪烁。
慢慢调大Rp的阻值,使LED刚刚灭,保持Rp这时的阻值即可。
当用手遮住光敏电阻的光线,LED就会闪烁。
编程思路:
使用定时器T0,方式1。
所以TMOD=00000001
即:
01H使用指令:
MOVTMOD,#01H
每50ms中断一次
当晶振为12MHZ时,1us加一。
50ms=50000us。
所以赋初值为
65536-50000=15536,将15536转换为十六进制为3CB0H高八位送TH0,第八位送TL0.使用指令:
MOVTH0,#3CH
MOVTL0,#0B0H
当晶振为6MHZ时,2us加一。
50ms=50000us,50000/2=25000所以赋初值为
65536-25000=40536,将40536转换为十六进制为9E58H高八位送TH0,第八位送TL0,使用指令:
MOVTH0,#9EH
MOVTL0,#58H
当晶振为11.0592MHZ时,12/11.0592us加一。
50ms=50000us,50000*11.0592/12=46080所以赋初值为
65536-46080=19456,将19456转换为十六进制为4C00H高八位送TH0,第八位送TL0,使用指令:
MOVTH0,#4CH
MOVTL0,#00H
因为50ms闪烁一次太快,当要求2S进行一次闪烁时则需要中断 2S/50ms=40次。
参考程序:
(以12MHZ为例)
ORG0000H
AJMPMAIN
ORG0003H ;
外部中断0的中断入口地址
AJMPHYSD
MAIN:
MOVTMOD,#01H ;
设置T0工作方式1,且为定时
MOVIE,#81H ;
CPU开中断和外部中断0开中断
BT:
CLRP1.0
SJMPBT ;
白天灭LED且等待中断
HYSD:
SETBP1.0 ;
亮LED
MOVRO,#40 ;
定时40次,即:
50ms*40=2S(这里亮2S)
LP:
MOVTH0,#3CH;
赋初值
MOVTL0,#0B0H
SETBTR0 ;
启动定时
JNBTF0,$ ;
等待50ms定时到,定时到后TF0为1
CLRTF0 ;
软件清除T0的溢出标志位TF0
DJNZR0,LP ;
判断是否有40次T0定时
MOVR0,#20
LP1:
MOVTH0,#3CH
SETBTR0
JNBTF0,$
CLRTF0
DJNZR0,LP1
JNBP3.2,HYSD
RETI18句
试卷编号3105
考题:
循环点亮8个发光二极管。
利用左移或右移指令从左向右点亮并循环n次,或从右向左点亮并循环n次,循环完毕全部熄灭。
(循环顺序及次数由考评员现场指定)
高电单片机实操程序
1.电路原理图:
2.电路工作原理:
根据电路原理图可知:
当某位输出为高电平时对应的LED发光。
要求从左向右移动时先从P1口输出10000000即:
80H 这时LED7亮,其它灭,亮的时间可以通过延时确定。
当向P1口送01000000即:
40H 这时LED6亮,其它灭,依次类推。
所以可以通过RRA指令实现。
从左向右移动参考程序:
MOVR7,#40;
循环5次,一次需要依次点亮8个LED,所以为40
MOVA,#80H ;
送初值给累加器ACC,如果向左移动就用MOVA,#01H
MOVP1,A ;
送P1口进行LED显示
ACALLDELAY。
显示的时间通过延时子程序决定
RRA。
将A的内容循环右移动一位,如果向左移动就用RLA
DJNZR7,LOOP。
判断循环是否完毕
MOVP1,#00H
SJMP$。
完毕后等待
DELAY:
MOVR4,#5;
延时0.5S子程序(fOSC=6MHZ),如fOSC=12MHZ,用#10
D0:
MOVR5,#125。
5*2us
D1:
MOVR6,#200。
125*5*2*2us
D2:
DJNZR6,D2。
200*125*5*2*2us
DJNZR5,D1。
DJNZR4,D0。
RET
END
从右向左移动参考程序:
MOVR7,#32;
循环4次,一次需要依次点亮8个LED,所以为32
MOVA,#01H ;
送初值给累加器ACC用MOVA,#01H亮LED0
RLA。
将A的内容循环左移动一位
从左向右移动3次,然后从右向左移动2次参考程序:
MOVR7,#24;
循环3次,一次需要依次点亮8个LED,所以为24
送初值给累加器ACC
将A的内容循环右移动一位
MOVR7,#16;
循环2次,一次需要依次点亮8个LED,所以为16
LOOP1:
DJNZR7,LOOP1。
高电实操3103:
计数报警
利用8031计数器,当计数满n个后LED发光二极管发光报警。
计数脉冲用消抖动开关产生。
按按钮开关n次,发光二极管发光。
考题要求,每按下一次按钮时计数一次,通过程序设定计数次数,按下次数到后LED亮(P1.0输出高电平)。
根据硬件结构可知:
按键输入为计数器T0。
所以T0在这里不能作为定时器,而是作为计数器。
所以TMOD=00000100(13位计数器)采用指令 MOVTMOD,#04H
或TMOD=00000101(16位计数器)采用指令 MOVTMOD,#05H
或TMOD=00000110(自动重装入8位计数器)采用指令 MOVTMOD,#06H
输入管脚P3.4如果直接通过开关接入的话,会有很大的干扰,也就是按下或松开时会有抖动,造成按下一次可能会计数若干次。
所以采用两个与非门组成一个触发器进行抗干扰(防抖动电路)
解法一:
用模式1,不可循环
START:
MOVTMOD,#05H;
设置T0为16位计数器
MOVTH0,#0FFH ;
赋初值此处计数10次。
因为16位最多可计数65536
MOVTL0,#0F6H;
次,初值赋65536-10=65526=0FFF6H
SETBTR0 ;
启动计数器
CLRP1.0;
计数未到灭LED
JNBTF0,$ ;
等待计数到。
如果计数到则TF0自动变为“1”
SETBP1.0 ;
计数到亮LED
SJMP$;
等待
END
解法二:
用模式2,可循环
MOVTMOD,#06H ;
模式2,自动重装入8位计数器
CLRP1.0 ;
开始灭LED
MOVTH0,#0F6H;
赋初值,模式2最多可计数256次。
这里为10次
MOVTL0,#0F6H ;
初值为256-10=246=0F6H,模式2赋初值一样
SETBTR0 ;
LP:
JBCTFO,REP ;
计数未满顺序执行,满则跳REP同时将TF0清零。
SJMPLP
REP:
CPLP1.0 ;
将输出状态取反,
SJMPLP ;
跳LP等待下次计数10次
高电考题3104 :
数码管显示
利用8031串行口和74LS164移位寄存器驱动数码管。
数码管依次按指定的顺序循环并显示数字。
2. 电路工作原理
要求从串口将数据发送出去,所以串口为工作方式0,也就是使SCON=00000000
当执行 MOVA,#3FH
MOVSBUF,A时,其发送动作为:
P3.0(RXD)端送数据,低位在前,高位在后。
P3.1(TXD)输出移位脉冲。
示意如下:
3FH=00111111
当八位数字发送完毕后单片机自动将TI置1,没有发送完毕TI始终为0
根据硬件可知,P3.0接在74LS164的数据输入端,P3.1接在74LS164的时钟端。
而74LS164的功能为:
第一个时钟来了将数据输入端的状态移位到Q7端,Q7的状态到Q6端……依次类推最后Q1的状态到Q0端,Q0状态丢失。
第二个时钟脉冲来到再作一次全体移动。
所以当来了8个时钟脉冲后。
原来第一次Q7的状态就到了Q0。
也就是当数据端随着时钟脉冲同步输出00111111时,8个时钟脉冲过后74LS164的Q7……Q0输出也为00111111,这时会使共阴数码管显示一个“3”。
3.参考程序
例如:
规定按1、3、5、7、9、2、4、6、8、0、A、B、C、D、E、F、-、P、·
、熄灭顺序循环显示。
法一.START:
MOVSCON,#00H;
串口为工作方式0,8位移位寄存器方式
MOVR0,#0;
送偏移量初值
MOVDPTR,#TAB;
送表头首地址给DPTR,也就是表06H所在的地址
MOVA,R0
MOVCA,@A+DPTR;
查表,将查的的数据送ACC
CPLA;
如果为共阳LED就加上此句,否则不加
MOVSBUF,A;
送串口进行发送
JNBTI,$;
发送未完TI为0就等待,完则TI为1顺序执行
CLRTI;
发送结束标志必须用软件清零
偏移量加一
ACALLDELY;
调延时,也就是LED显示一位数字的时间
CJNER0,#20,LP;
因为表格有20个字节数据,所以这里为20
SJMPSTART;
从头在来,无限循环下去
TAB:
DB06H,4FH,6DH,07H,6FH,5BH,66H,7DH,7FH,3FH(共阴)
DB77H,7CH,39H,5EH,79H,71H,40H,73H,80H,00H
DELY:
D0:
MOVR5,#125
D1:
MOVR6,#200
DJNZR6,D2
DJNZR5,D1
DJNZR4,D0
思考题:
如果显示为循环显示8051CPU,每次间隔1秒,共大循环5次。
试试如何改动程序。
试卷编号(3106)霓虹灯控制
实现8个发光二极管从两边向中间或从中间向两边依次循环点亮来模拟霓虹灯效果,循环n次后全部熄灭。
1.电路原理图
2.电路工作原理
根据硬件可知:
P1口某位输出为高电平,则对应的LED发光.
示意图如下:
如果要使得LED4和LED3亮,则P1口应该输出为:
00011000即:
18H输出状态为:
如果要使得LED5和LED2亮,则P1口应该输出为:
00100100即:
24H输出状态为:
如果要使得LED6和LED1亮,则P1口应该输出为:
01000010即:
42H输出状态为:
如果要使得LED7和LED0亮,则P1口应该输出为:
10000001即:
81H输出状态为:
因此,如果希望LED输出状态由中间向两边亮,则表格按照顺序填写:
18H,24H,42H,81H
即可.根据此原理,无论状态如何变化都有对应的数据.
3.参考程序:
(1)从中间向两边亮,每次点亮0.5S共6个循环后结束.
MOVDPTR,#LED;
送表首地址给DPTR
MOVR7,#6;
此程序共6个循环
MOVR0,#0;
MOVA,R0
MOVCA,@A+DPTR;
查表
MOVP1,A;
送P1口进行显示
ACALLDELAY;
调用显示时间
INCR0;
CJNER0,#4,LOOP;
表格里4个数据没循环完跳`LOOP
DJNZR7,LOOP1;
6次没有循环完跳LOOP1
MOVP1,#00H
SJMP$
LED:
DB18H,24H,42H,81H
DELAY:
.;
延时0.5秒程序
.
RET
END
(1)从两边向中间亮,每次状态亮1秒,共4个大循环后结束.
(2)先从两边向中间亮3次,再从中间向两边亮5次,共6个循环
试卷编号(3107):
算术运算器
分别在内部RAM中20H单元和30H单元置入两个数,进行(20H+30H)
30H的算术运算,将运算结果通过串口通讯方式用LED显示出来。
(提示:
运算值不超过“F”)
1.参考电路
与试卷编号3104的硬件一样,工作原理相同。
3.参考程序:
MOVA,20H;
将20H的内容送累加器ACC
ADDA,30H;
将A的内容与30H的内容相加
MOVB,30H;
将30H的内容送寄存器B
MULAB;
将A的内容与B的内容相乘,低八位送ACC,高八位送B
MOVDPTR,#TAB;
送显示0~F的数据表格的表首地址到DPTR
MOVCA,@A+DPTR;
MOVSBUF,A;
从串口发送进行显示
JNBTI,$;
等待发送完毕
CLRTI
SJMP$
TAB:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH
DB6FH,77H,7CH,39H,5EH,79H,71H
试卷编号(3108):
继电器控制
1.实训目的
掌握软件延时程序,根据要求熟练编写不同的延时时间程序。
掌握隔离输出的常用方式之一:
继电器隔离输出
2.控制要求:
设计程序使P1.0反复输出高、低电平,通过继电器控制LED1和LED2轮流点亮。
程序采用软件延时n秒。
(延时时间由考评员现场指定,闪烁时间>
1.5S)
3.参考电路图:
4.工作原理:
当P1.0输出为高电平时,经过同相器74LS07后输出也为高电平,这时KA两端电压相等,KA不动作。
这时LED1得电亮。
当P1.0输出为低电平时,74LS07输出也为低电平。
KA得电吸合。
这时LED2亮。
二极管D是为了续流而设。
当P1.0轮流输出高低电平,则LED1和LED2轮流被点亮。
5.参考程序:
(该参考程序在12MHZ的晶振下运行,每1.5S两LED改变一次状态)
START:
CPLP1.0;
此程序每隔相同时间P1.0输出取反一次,相隔时间由子
ACALLDELAY;
程序DELAY的延时时间决定
SJMPSTART
MOVR6,#15;
此程序约为1.5S(稍微大于1.5S)
M:
MOVR5,#200
N:
MOVR4,#250
DJNZR4,$;
此句执行时间为:
2*1us*250*200*15=1.5S
DJNZR5,N
DJNZR6,M
RET
6.思考题:
单片机复位后先亮LED1时间为1S。
再亮LED2,时间为2.5秒。
循环不止。
试卷编号(3109):
倒计时音乐报警器
1.实训目的:
熟悉简单的按键输入进行控制设备和显示
2.控制要求:
按下起动按钮,数码管从“9—0”按递减顺序显示,当显示到“0”时,音乐响起,按下停止按钮,音乐停止。
3.参考电路图:
4.工作原理:
单片机复位后先置P1.1为低电平然后等待启动按钮QA启动,启动后数码管先显示9,隔段时间后显示8。
依次往下显示。
到显示0后置P1.1输出为高电平,这时音乐芯片加上了工作电压开始工作。
扬声器就开始发音。
当停止按钮(TA)按下,音乐停止。
CLRP1.1
JBP3.2,$
MOVDPTR,#TAB
MOVR0,#0
CONT1:
MOVA,R0
MOVCA,@A+DPTR
MOVSBUF,A
LP1:
JBCTI,LP
SJMPLP1
LP:
CJNEA,#3FH,CONT
SETBP1.1
JBP3.3,$
CLRP1.1
CONT:
ACALLDELAY
SJMPCONT1
TAB:
DB6FH,7FH,07H,7DH,6DH,66H,4FH,5BH,06H,3FH
MOVR7,#10
M:
MOVR6,#200
N :
MOV R5 , #250
DJNZ R5 , $
DJNZR6,N
DJNZR7,M
RET
试卷编号(3110):
数据传送
熟练掌握单片机在执行数据传送和堆栈指令时内部的变化情况
把20H单元开始的外部RAM单元中的8个数据送到30H单元开始的外部RAM单元中;
存取要求:
源数据存储地址及目的地数据存储地址使用堆栈。
2.在脱机运行下的参考程序:
MOV70H,#20H
MOV71H,#30H
MOVR7,#8
PUSH71H
PUSH70H
INC70H
INC71H
DJNZR7,LOOP
MOVDPH,#00H
POPDPL
MOVXA,@DPTR
MOVX@DPTR,A
DJNZR7,LOOP1
循环灯点亮(高电实操题3105)
循环点亮8个发光二极管LED。
要求:
按规定的顺序依次点亮8个LED(每个亮0.5S),循环N次。
按D1、D2、D3、D4、D5、D6、D7、D8顺序依次点亮(每个亮0.5S),循环3次。
解:
START:
MOVR1,#3
LP0:
MOVR0,#0
MOVDPTR,#TAB
MOVA,R0
MOVCA,@A+DPTR
MOVP1,A
ACALLDELY
INCR0
CJNER0,#8,LP
DJNZR1,LP0
MOVP1,#00H
SJMP$
DB01H,02H,04H,08H,10H,20H,40H,80H
D2:
RET;
共20句
计数报警(高电实操3103)用80
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 高级 电工 单片机 教程