高级电工单片机实操教程.docx

上传人:b****5 文档编号:8343556 上传时间:2023-01-30 格式:DOCX 页数:35 大小:398.67KB
下载 相关 举报
高级电工单片机实操教程.docx_第1页
第1页 / 共35页
高级电工单片机实操教程.docx_第2页
第2页 / 共35页
高级电工单片机实操教程.docx_第3页
第3页 / 共35页
高级电工单片机实操教程.docx_第4页
第4页 / 共35页
高级电工单片机实操教程.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

高级电工单片机实操教程.docx

《高级电工单片机实操教程.docx》由会员分享,可在线阅读,更多相关《高级电工单片机实操教程.docx(35页珍藏版)》请在冰豆网上搜索。

高级电工单片机实操教程.docx

高级电工单片机实操教程

试卷编号3301

控制要求:

在内部RAM中20H开始的区域中存有二十个无符号数,找出其中最大和最小数,分别送34H和35H单元。

(注:

目标程序于0800H单元开始)

 

ORG0000H

LJMPMAIN

ORG0800H

MAIN:

MOVR0,#20H;从内部20H单元开始查找

MOVR7,#19;20个数需要比较19次

MOV34H,@R0;将20H单元的内容同时送34H和35H

MOV35H,@R0

LOOP:

INCR0;指向下一个单元

MOVA,@R0;读取到ACC

CJNEA,34H,B1;将读取的内容与34H的内容进行比较,不相等跳B1处

SJMPEXIT;相等则不作其它比较跳EXIT处

B1:

JCXIAO;若A的内容小于34H的内容则C为1,跳XIAO处

MOV34H,A;C为0表明A大于34H的内容则替换掉34H的内容

SJMPEXIT;替换后退出不作最小数比较

XIAO:

CJNEA,35H,B2;作最小数比较,不相等跳B2处

SJMPEXIT;相等退出到EXIT处

B2:

JNCEXIT;若A的内容大于35H的内容跳EXIT处

MOV35H,A;若A的内容小于35H的内容则替换掉35H的内容

EXIT:

DJNZR7,LOOP;判断比较次数是否完毕

SJMP$;比较完毕原地等待

END

3102

控制要求:

利用8031定时器与中断功能控制一个“航标灯”,黑夜时发光二极管按指定频率闪烁(如:

亮2S,灭2S,循环);白天时发光二极管不亮。

电路图:

电路工作原理:

白天光敏电阻阻值小,使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

MOVTL0,#0B0H

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指令实现。

从左向右移动参考程序:

ORG0000H

MOVR7,#40;循环5次,一次需要依次点亮8个LED,所以为40

MOVA,#80H  ;送初值给累加器ACC,如果向左移动就用MOVA,#01H

LOOP:

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。

125*5*2*2us

DJNZR4,D0。

5*2us

RET

END

从右向左移动参考程序:

ORG0000H

MOVR7,#32;循环4次,一次需要依次点亮8个LED,所以为32

MOVA,#01H  ;送初值给累加器ACC用MOVA,#01H亮LED0

LOOP:

MOVP1,A   ; 送P1口进行LED显示

ACALLDELAY。

显示的时间通过延时子程序决定

RLA。

将A的内容循环左移动一位

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。

125*5*2*2us

DJNZR4,D0。

5*2us

RET

END

从左向右移动3次,然后从右向左移动2次参考程序:

ORG0000H

MOVR7,#24;循环3次,一次需要依次点亮8个LED,所以为24

MOVA,#80H  ;送初值给累加器ACC

LOOP:

MOVP1,A   ; 送P1口进行LED显示

ACALLDELAY。

显示的时间通过延时子程序决定

RRA。

将A的内容循环右移动一位

DJNZR7,LOOP。

判断循环是否完毕

MOVP1,#00H

MOVR7,#16;循环2次,一次需要依次点亮8个LED,所以为16

MOVA,#01H  ;送初值给累加器ACC

LOOP1:

MOVP1,A   ; 送P1口进行LED显示

ACALLDELAY。

显示的时间通过延时子程序决定

RLA。

将A的内容循环右移动一位

DJNZR7,LOOP1。

判断循环是否完毕

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。

125*5*2*2us

DJNZR4,D0。

5*2us

RET

END

高电实操3103:

计数报警

考题:

利用8031计数器,当计数满n个后LED发光二极管发光报警。

计数脉冲用消抖动开关产生。

控制要求:

按按钮开关n次,发光二极管发光。

1.电路原理图:

2.电路工作原理:

 考题要求,每按下一次按钮时计数一次,通过程序设定计数次数,按下次数到后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,可循环

START:

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次

END

高电考题3104 :

 数码管显示

考题:

利用8031串行口和74LS164移位寄存器驱动数码管。

控制要求:

数码管依次按指定的顺序循环并显示数字。

1.电路原理图:

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所在的地址

LP:

MOVA,R0

MOVCA,@A+DPTR;查表,将查的的数据送ACC

CPLA;如果为共阳LED就加上此句,否则不加

MOVSBUF,A;送串口进行发送

JNBTI,$;发送未完TI为0就等待,完则TI为1顺序执行

CLRTI;发送结束标志必须用软件清零

INCR0;偏移量加一

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:

MOVR4,#5;延时0.5S子程序(fOSC=6MHZ),如fOSC=12MHZ,用#10

D0:

MOVR5,#125

D1:

MOVR6,#200

D2:

DJNZR6,D2

DJNZR5,D1

DJNZR4,D0

RET

思考题:

如果显示为循环显示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个循环后结束.

ORG0000H

MOVDPTR,#LED;送表首地址给DPTR

MOVR7,#6;此程序共6个循环

LOOP1:

MOVR0,#0;送偏移量初值

LOOP:

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.参考电路

2.电路工作原理:

与试卷编号3104的硬件一样,工作原理相同。

3.参考程序:

ORG0000H

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

END

试卷编号(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改变一次状态)

ORG0000H

START:

CPLP1.0;此程序每隔相同时间P1.0输出取反一次,相隔时间由子

ACALLDELAY;程序DELAY的延时时间决定

SJMPSTART

DELAY:

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

END

6.思考题:

单片机复位后先亮LED1时间为1S。

再亮LED2,时间为2.5秒。

循环不止。

试卷编号(3109):

倒计时音乐报警器

1.实训目的:

熟悉简单的按键输入进行控制设备和显示

2.控制要求:

按下起动按钮,数码管从“9—0”按递减顺序显示,当显示到“0”时,音乐响起,按下停止按钮,音乐停止。

3.参考电路图:

4.工作原理:

单片机复位后先置P1.1为低电平然后等待启动按钮QA启动,启动后数码管先显示9,隔段时间后显示8。

依次往下显示。

到显示0后置P1.1输出为高电平,这时音乐芯片加上了工作电压开始工作。

扬声器就开始发音。

当停止按钮(TA)按下,音乐停止。

5.参考程序:

ORG0000H

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

SJMP$

CONT:

ACALLDELAY

SJMPCONT1

TAB:

DB6FH,7FH,07H,7DH,6DH,66H,4FH,5BH,06H,3FH

DELAY:

MOVR7,#10

M:

MOVR6,#200

 N :

 MOV  R5 , #250

     DJNZ  R5 , $

DJNZR6,N

DJNZR7,M

RET

END

试卷编号(3110):

数据传送

1.实训目的:

熟练掌握单片机在执行数据传送和堆栈指令时内部的变化情况

2.控制要求:

把20H单元开始的外部RAM单元中的8个数据送到30H单元开始的外部RAM单元中;

存取要求:

源数据存储地址及目的地数据存储地址使用堆栈。

2.在脱机运行下的参考程序:

ORG0000H

MOV70H,#20H

MOV71H,#30H

MOVR7,#8

LOOP:

PUSH71H

PUSH70H

INC70H

INC71H

DJNZR7,LOOP

MOVR7,#8

MOVDPH,#00H

LOOP1:

POPDPL

MOVXA,@DPTR

POPDPL

MOVX@DPTR,A

DJNZR7,LOOP1

SJMP$

END

循环灯点亮(高电实操题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

LP:

MOVA,R0

MOVCA,@A+DPTR

MOVP1,A

ACALLDELY

INCR0

CJNER0,#8,LP

DJNZR1,LP0

MOVP1,#00H

SJMP$

TAB:

DB01H,02H,04H,08H,10H,20H,40H,80H

DELY:

MOVR4,#5;延时0.5S子程序(fOSC=6MHZ),如fOSC=12MHZ,用#10

D0:

MOVR5,#125

D1:

MOVR6,#200

D2:

DJNZR6,D2

DJNZR5,D1

DJNZR4,D0

RET;共20句

计数报警(高电实操3103)用80

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1