二.請設計一解碼硬体,控制四個週邊ic,其地址如下:U1(0000-3FFFH)
U2(4000H-7FFFH),U3(8000H-bFFFH),U4(C000H-FFFFH),不限IC
三.請解釋 MOV,MOVX,MOVC之差異,及 MOVX A,@DPTR與 MOVX A,@R0之差異
四.請設計一組語,由1累加至100,BIN及 BCD各一程式
初學者想知道自己評分,可以貼上,60分及格可考慮升助理工程師,80分以上立即升助
助理工程師
一.請論 reset pin之功用,以及 reset 後,8051內部之初值是如何?
Ans:1.讓單晶片程式知道要從哪裡開始執行
2.PC = 0000h , ACC = 00h , B = 00h , PSW = 00h , SP = 07h , DPTR = 0000h
P0 = FFh , P1 = FFh , P2 = FFh , P3 = FFh , IP = xxx00000b , IE = 0xx00000b
TMOD = 00h , TCON = 00h , T0 = 0000h , T1 = 0000h , SCON = 00h , SBUF = 00h
在Reset發生時,reset pin 必須維持至少2個機械週期.
Reset後,P0~P3回復成輸入狀態
CPU從位址0000H開始執行
上面說到reset的時間要有2個機械週期,必須是mpu判定為High(或是low)一定時間,
一般開機時,必須等到電源穩定才會開始工作,而週邊各IC工作電壓不一定都一樣,
----------------------------------------------------------------------------------------------------------------------------
movc 可以再補充一點,當提取 rom資料時,如果 rom 是外部 rom
則 psen 會有訊息 提示一下,不止 mpu,cpu才有 reset,凡大
型 vlsi以上皆有,及 mpu,vlsi皆由很多部份組合起,那麼我請問你,
--------------------------------------------------------------------------
U2(4000H-7FFFH),U3(8000H-DFFFH),U4(C000H-FFFFH),不限IC
Ans:U1 = /b15 and /b14
U2 = /b15 and b14
U3 = (b15 and /b14) or (b15 and /b13)
U4 = b15 and b14
U3 和 U4 有位址重疊
三.請解釋 MOV,MOVX,MOVC之差異,及 MOVX A,@DPTR與 MOVX A,@R0之差異
Ans:
MOV->立即定址法,直接定址法,暫存器定址法,暫存器間接定址法
MOVX ->外部記憶體暫存器間接定址法
movc ->索引定址法
MOV->立即定址法,直接定址法,暫存器定址法,暫存器間接定址法
MOV指令執行時,是存取內部的RAM,不會使讓 /RD /WR 的信號有動作
MOVX ->外部記憶體暫存器間接定址法
使用MOVX時,因是對外部資料記憶體作存取,所以會使/RD /WR 的信號相對致能
movx a,@DPTR與 movx a,@r0差異,未解釋
皆是從外部資料記憶體經P0取得資料
movx a,@DPTR-->16位元定址,P0為資料,A7~A0位址,P2為A8~A15位址
movx a,@r0------>8位元定址,P0為資料,A7~A0位址,P2內容不受影響
MOVC ->索引定址法
可以配合PC讀取ROM的資料
可以配合DPTR存取RAM的資料
主要使用於查表或是提取程式記憶體內容
/*-----------------------------------------------------------------------*/
movc 可以再補充一點,當提取 rom資料時,如果 rom 是外部 rom
則 psen 會有訊息
/*-------------------------------------------------------------------------*/
四.請設計一組語,由1累加至100,BIN及 BCD各一程式
Ans:
2.BCD
/*-----------------------------------------------------------------------------------------*/
MOV30h,#00;Counter Lo byte
MOV31h,#00;Counter Hi byte
MOV32h,#00;Total Lo byte
MOV33h,#00;Total Hi byte
L1:
MOVA,30h
ADDA,#1
DAA
MOV30h,A
MOVA,31h
ADDCA,#0
DAA
MOV31h,A
MOVA,32h
ADDA,30h
DAA
MOV32h,A
MOVA,33h
ADDCA,31h
DAA
MOV33h,A
MOVA,31h
CJNEA,#01h,L1
MOVA,30h
CJNEA,#00h,L1
/*-----------------------------------------------------------------------------------*/
----------------------------------------------------------------------------------------------
;==========================================
Total equ 30h
mov Total,#0 ;預設100h
mov Total+1,#1 ;
;----------------------------------------
mov r3,#1 ;由1加至99h
$loop0 mov r2,#2 ;2
mov b,r3
mov r0,#Total
clr c ;low 不加進位
$loop1 mov a,@r0
addc a,b
da a
mov @r0,a
inc r0 ;第二byte
mov b,#0
djnz r2,$loop1
mov a,r3
add a,#1
da a
mov r3,a
jnz $loop0 ;=0時,結束
ret
-------------------------------------------------------------------------------------------