《單片機(jī)原理及應(yīng)用B答案.doc》由會(huì)員分享,可在線閱讀,更多相關(guān)《單片機(jī)原理及應(yīng)用B答案.doc(6頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
《單片機(jī)原理及應(yīng)用》模擬卷2
1、 分析程序的執(zhí)行結(jié)果,將結(jié)果填寫(xiě)到空格中。
ORG 0000H
MOV 30H,#50H
MOV R0,#30H
MOV A,@R0 ;(A= 50H )
MOV A,#79H
MOV B,#20H ;(A= 79H B= 20H )
DIV AB ;(A= 03H B= 19H )
PUSH B
MOV B,#0AH
MUL AB ;(A= 1EH B= 00H )
POP B
ADD A,B ;(A= 37H B= 19H )
MOV 30H,A ;(30H單元的內(nèi)容= 37H )
LOOP: AJMP LOOP
2、 將MCS51內(nèi)部RAM50H~55H單元存放的12個(gè)16進(jìn)制數(shù)變?yōu)锳SCII碼,放到2800H單元開(kāi)始的外部RAM中。
解:ORG 0000H
LJMP MAIN
MAIN: MOV DPTR,#70H
MOV @R1,#1120H
MOV R0,#06
TOP: MOV A,@DPTR
PUSH ACC
ANL A,#0FH ;取出四位二進(jìn)制數(shù)
PUSH ACC
CLR C
SUBB A,#0AH
POP ACC ;彈回A中
JC LOOP ;該數(shù)〈10去LOOP
ADD A,#07H ;否則加07H
LOOP: ADD A,#30H ;加30H
MOV R2,A
POP ACC
ANL #0F0H ;取出下一個(gè)四位二進(jìn)制數(shù)
PUSH ACC
CLR C
SUBB A,#0AH
POP ACC ;彈回A中
JC LOOP ;該數(shù)〈10去LOOP1
ADD A,#07H ;否則加07H
LOOP1: ADD A,#30H ;加30H
SWAP A
ORL A,R2
MOVX @R1,A ;將結(jié)果存到RAM中
INC DPTR
INC R1
DEC R0
JNZ TOP ;判斷轉(zhuǎn)換完沒(méi)有,未轉(zhuǎn)換完則轉(zhuǎn)TOP
3、 用8031的T0定時(shí)/計(jì)數(shù)器,設(shè)計(jì)程序,實(shí)現(xiàn)在P1.0輸出50ms的方波,輸出100個(gè)方波后停止輸出。
#include
#define uchar unsigned char
uchar a;
void main(void)
{
TMOD=0X01;
TL0=0XB0;
TH0=0X3C;
EA=1;
ET0=1;
TR0=1;
while(1)
{
if(a==100)
{
EA=0;
TR0=0;
}
}
}
void timer0(void) interrupt 1
{
TL0=0XB0;
TH0=0X3C;
cpl p1.0;
a++;
}
4、 甲單片機(jī)利用方式1將內(nèi)部RAM30H~37H單元的ASCII碼發(fā)送到乙機(jī)。編制甲機(jī)發(fā)送和乙機(jī)接收的程序(加奇校驗(yàn))。
A機(jī)發(fā)送程序設(shè)計(jì)
ST:
MOV TMOD,#20H
MOV TL1,#0E8H
MOV TH1,#0E8H
SETB TR1
MOV SCON ,#50H
MOV R0,#30H
MOV R1,#08H
LOOP:
MOV A,@R0
CALL FS INC R0
DJNZ R1,LOOP
RET
FS:
MOV C,P
CPL C
MOV ACC.7,C
MOV SBUF A
WAIT:
JNB TI,WAIT
CLR TI
RET
B機(jī)的接受程序設(shè)計(jì)
接受串口發(fā)來(lái)的程序,假設(shè)存放在30H—37H中
ST:
MOV TMOD,#20H
MOV TL1,#0E8H
MOV TH1,#0E8H
SETB TR1
MOV SCON ,#50H
MOV R0,#30H
MOV R1,#08H
LOOP:
CALL JS
JNC ERROR
MOV @R0,A
INC R0
DJNZ R1,LOOP
RET ERROR:………;出錯(cuò)處理,如返回出錯(cuò)信息等
RET
JS:
JNB RI JS
CLR RI
MOV A, SBUF
MOV P C
ANL A,#7FH
RET
5、 利用8031和8位A/D(ADC0809)構(gòu)成數(shù)據(jù)采集系統(tǒng)。每隔20ms采集通道0的一次數(shù)據(jù),將采集的數(shù)據(jù)存放在30H的內(nèi)部RAM中。畫(huà)出原理示意圖,寫(xiě)出較完整的程序清單。(提示:需要用定時(shí)器和外部中斷)。
MAIN:MOV TMOD,#01H //定時(shí)器0 初始化
MOV TL0,#10H
MOV TH0,#27H
MOV R0,#30H
SETB TR0
SETB ET0
SETB EX0
SETB EA
SJMP $
定時(shí)器0 中斷服務(wù)子程序:
ORG 000BH
MOV DPTR,#7EF8H //啟動(dòng)ADC,對(duì)IN0 通
//道進(jìn)行AD 轉(zhuǎn)換
CLR TR0
MOV TL0,#10H
MOV TH0,#27H
SETB TR0
RETI
外部中斷(INT0)子程序:
ORG 0003H
MOVX A,@DPTR
MOV @R0,A
INC R0
RETI
鍵盤(pán)掃描子程序: KEY1: ACALL KS1 ;調(diào)用判斷有無(wú)鍵按下子程序
JNZ LK1
AJMP KEY1
LK1: ACALL TM12s ;調(diào)用12ms 延時(shí)子程序
ACALL KS1
JNZ LK2
AJMP KEY1
LK2: MOV R2,#0FEH ;首列掃描字入R2
MOV R4,#00H ;首列號(hào)入R4
LK4: MOV DPTR,#0FD01H ;列掃描字送8155PA 口
MOV A,R2
MOVX @DPTR,A
INC DPTR ;指向8155PC 口
INC DPTR
MOVX A,@DPTR
JB ACC.0,LONE;第0 行無(wú)鍵按下,查第1 行
MOV A,#00H ;有鍵按下,該行首鍵號(hào)送A
AJMP LKP
LONE: JB ACC.1,NEXT
MOV A,#08H
LKP: ADD A,R4 ;鍵號(hào)=行鍵號(hào)+列號(hào)
PUSH ACC
LK3: ACALL KS1 ;等待鍵釋放
JNZ LK3 POP ACC ;鍵釋放,鍵號(hào)放入A
RET
NEXT: INC R4 ;指向下一列,列號(hào)加1
MOV A,R2 ;判斷8 列是否全掃描完
JNB ACC.7,KND
RL A ;求得下一列的掃描字
MOV R2,A
AJMP LK4
KND: AJMP KEY1
KS1: MOV DPTR,#0FD01H ;指向PA 口
MOV A,#00H ;全掃描字
MOVX @DPTR,A
INC DPTR ;指向PB 口
INC DPTR
MOVX A,@DPTR
CPL
ANL A,#03H ;屏蔽高6 位
RET
TM12ms: MOV R7,#18H ;延遲12ms 子程序
TM : MOV R6,#0FFH
TM6: DJNZ R6,TM6
DJNZ R7,TM
RET
LED 顯示子程序:
MOV R0,#30H ;設(shè)顯示緩沖區(qū)首地址為30H
MOV R3,#02H ;掃描數(shù)位初值為00000010B
LD 0: MOV A,R3 ;掃描數(shù)位送PA 口
MOV DPTR,#0FD01H
MOVX @DPTR,A
INC DPTR ;得到B 口地址
MOV A,@R0 ;加偏移值,得到相應(yīng)的顯示代碼
ADD A,#0DH
MOVC A,@A+PC
MOVX @DPTR,A
ACALL LD1 ;調(diào)用延時(shí)1ms 的子程序
INC R0 MOV A,R3 ;如果6 個(gè)顯示器都掃描一遍,返回主程序
ADD A,#01H ;使最高位是否為1 判斷掃描是完畢
JB ACC。7,LD1
RL A ;修改掃描行
MOV R3,A
AJMP LD0
LD 1: RET
SEG 1:3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
DL 1: MOV R7,#02H ;延時(shí)1ms 子程序
DL : MOV R6,#0FFH
DL 6: DJNZ R6,DL6
DJNZ R7,DL
RET
鏈接地址:http://ioszen.com/p-6544944.html