高级电工单片机实操教案

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

试题编号3301

控制要求:在内部RAM中20H开始的区域中存有二十个无符号数,找出其中最大和最小数,分别送34H和35H单元。(注:目标程序于0800H单元开始)

ORG 0000H

LJMP MAIN

ORG 0800H

MAIN : MOV R0, #20H ;从内部20H单元开始查找

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

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

MOV 35H, @R0

LOOP : INC R0 ;指向下一个单元

MOV A , @R0 ;读取到ACC

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

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

B1 : JC XIAO ;若A的内容小于34H的内容则C为1,跳XIAO处MOV 34H , A ;C为0表明A大于34H的内容则替换掉34H的内容

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

XIAO : CJNE A , 35H , B2 ;作最小数比较,不相等跳B2处

SJMP EXIT ;相等退出到EXIT处

B2 : JNC EXIT ;若A的内容大于35H的内容跳EXIT处

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

EXIT : DJNZ R7 , LOOP ;判断比较次数是否完毕

SJMP $ ;比较完毕原地等待

END

3102

控制要求:利用8031定时器与中断功能控制一个“航标灯”,黑夜时发光二极管按指定频率闪烁(如:亮2S,灭2S,循环);白天时发光二极管不亮。

电路图:

电路工作原理:

白天光敏电阻阻值小,使P3.2输入电位为高电平,不产生中断,使LED灭。晚上光敏电阻阻值变大,使P3.2的输入电位为低电平,这时产生中断,中断使LED闪烁。只要是在晚上要求LED一直闪烁。所以中断应该采用电平触发方式。

调试方法:

接好电路,编好程序,使光敏电阻暴露在光线下,调节Rp到最小值,这时LED应该闪烁。慢慢调大Rp的阻值,使LED刚刚灭,保持Rp这时的阻值即可。当用手遮住光敏电阻的光线,LED就会闪烁。

编程思路:

使用定时器T0,方式1。所以TMOD=0 0 0 0 0 0 0 1

即:01H 使用指令:MOV TMOD , #01H 每50ms中断一次

当晶振为12MHZ时,1us加一。50ms=50000us。所以赋初值为

65536-50000=15536 ,将15536转换为十六进制为3CB0H 高八位送TH0, 第八位送TL0. 使用指令:MOV TH0 , #3CH

MOV TL0 , #0B0H

当晶振为6MHZ时,2us加一。50ms=50000us,50000/2=25000 所以赋初值为

65536-25000=40536 ,将40536转换为十六进制为9E58H 高八位送TH0, 第八位送TL0 , 使用指令:MOV TH0 , #9EH

MOV TL0 , #58H

当晶振为11.0592MHZ时,12/11.0592 us加一。50ms=50000us,50000*11.0592/12=46080 所以赋初值为

65536-46080=19456 ,将19456转换为十六进制为4C00H 高八位送TH0, 第八位送TL0 , 使用指令:MOV TH0 , #4CH

MOV TL0 , #00H

因为50ms闪烁一次太快,当要求2S进行一次闪烁时则需要中断2S/50 ms=40次。

参考程序:(以12MHZ为例)

ORG 0000H

AJMP MAIN

ORG 0003H ;外部中断0的中断入口地址

AJMP HYSD

MAIN:MOV TMOD,#01H ;设置T0工作方式1,且为定时

MOV IE,#81H ;CPU开中断和外部中断0开中断

BT:CLR P1.0

SJMP BT ;白天灭LED且等待中断

HYSD:SETB P1.0 ;亮LED

MOV RO,#40 ;定时40次,即:50ms*40=2S(这里亮2S)

LP:MOV TH0,#3CH ;赋初值

MOV TL0,#0B0H

SETB TR0 ;启动定时

JNB TF0,$ ;等待50ms定时到,定时到后TF0为1

CLR TF0 ;软件清除T0的溢出标志位TF0

DJNZ R0,LP ;判断是否有40次T0定时

MOV R0 , #20

LP1: MOV TH0 , #3CH

MOV TL0 , #0B0H

SETB TR0

JNB TF0 , $

CLR TF0

DJNZ R0 , LP1

JNB P3.2,HYSD

RETI 18句

试题编号3105

考题:循环点亮8个发光二极管。 控制要求:利用左移或右移指令从左向右点亮并循环n 次,或从右向左点亮并循环n 次,循环完毕全部熄灭。(循环顺序及次数由考评员现场指定) 高电单片机实操程序

1.电路原理图:

2.电路工作原理:

根据电路原理图可知:当某位输出为高电平时对应的LED发光。要求从左向右移动时先从P1口输出10000000即:80H这时LED7亮,其它灭,亮的时间可以通过延时确定。当向P1口送01000000即:40H这时LED6亮,其它灭,依次类推。所以可以通过RR A 指令实现。

从左向右移动参考程序:

ORG 0000H

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

MOV A , #80H;送初值给累加器ACC,如果向左移动就用MOV A , #01H LOOP : MOV P1, A;送P1口进行LED显示

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

RR A ;将A的内容循环右移动一位,如果向左移动就用RL A

DJNZ R7 , LOOP ;判断循环是否完毕

MOV P1, #00H

SJMP $ ;完毕后等待

DELAY: MOV R4,#5 ;延时0.5S子程序(f

OSC =6M

HZ

),如f

OSC

=12M

HZ

,用#10

D0: MOV R5,#125 ;5*2us

D1: MOV R6,#200 ;125*5*2*2us

D2: DJNZ R6,D2 ;200*125*5*2*2us

DJNZ R5,D1 ;125*5*2*2us

DJNZ R4,D0 ;5*2us

RET

END

从右向左移动参考程序:

ORG 0000H

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

MOV A , #01H;送初值给累加器ACC用MOV A , #01H亮LED0 LOOP : MOV P1, A;送P1口进行LED显示

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

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

DJNZ R7 , LOOP ;判断循环是否完毕

MOV P1, #00H

SJMP $ ;完毕后等待

DELAY: MOV R4,#5 ;延时0.5S子程序(f

OSC =6M

HZ

),如f

OSC

=12M

HZ

,用#10

D0: MOV R5,#125 ;5*2us

D1: MOV R6,#200 ;125*5*2*2us

D2: DJNZ R6,D2 ;200*125*5*2*2us DJNZ R5,D1 ;125*5*2*2us

DJNZ R4,D0 ;5*2us

RET

END

相关文档
最新文档