常用寄存器:
0x01 (R1) 計時器
0x02 (R2)程序計數器 PC
0x03 (R3)狀態寄存器
0x04 (R4)間址寄存器
0x05 (R5)IO PORT 5
0x06 (R6)IO PORT 6
----- (IOC5)P5的輸入輸出配置
----- (IOC6)P6的輸入輸出配置
0x0f (ISR,讀)中斷信號指示寄存器(第三位有效,分別對應於3個中斷源)
0x0f (IOCF,寫)中斷屏蔽標志
0x0E (IOCE)(IO60作為中斷輸入的配置與看門狗的開關在一個寄存器中)
(IOCB、IOCD、IOCC)上拉,下拉,高阻設置腳...
目錄
看門狗設置
(WDT 計時的使能或禁止可隨時由指令控制(IOCE 寄存器)
相關的寄存器:
圖(一)IOCE寄存器 (0x0E)
0:關閉
1:使能
1 ;關閉wd 2 MOV A, IOCE 3 AND A, @01111111B 4 MOV IOCE, A
IO相關
概述:
"BS","BC" 等指令是先 "讀" 再 "寫" ,
1 ;例如 2 bc 0x06,3 3 ; 指令是將整個 Port 6 (8 pin) 讀進 CPU,執行位運算 4 ; 后再寫至 Port 6 上。
IO所讀入內容有兩個路徑來源,一是 I/O pin 上的內容,另一是輸出 Latch 上的內容.
當I/O pin 設計為輸入 pin 時(對應的 I/O 控制寄存器為"1"),讀 pin 上的內容。
若 I/O pin設計為輸出 pin 時(對應的 I/O 控制寄存器為"0"),讀 輸出 Latch 上的內容。
IO模式設置:
將每個 I/O 的設定寫入累加器(A)中,再將累加器的內容寫到 I/O 控制寄存器中,設定就算完成了!
1 ;例 1:將 PORT6 設定為 OUTPUT PORT。 2 PORT6 == 6 3 MOV A, @0X00 4 IOW PORT6 5 6 ;例 2:將 PORT6 的低四位設成 INPUT PORT;高四位設定為 OUTPUT PORT。 7 PORT6 == 6 8 MOV A, @0X0F 9 IOW PORT6 10 11 ;設定A= 0X0F 12 ;高四位為OUTPUT PORT 13 ;低四位為INPUT PORT。
IOC5~IOC6(I/O 口控制寄存器)
1:輸入(高阻)
0:輸出
中斷功能引腳設置(P60)
圖(二) 依然使用的IOCE寄存器
0:雙向 I/0 口
1:外部中斷輸入腳.[此時 P60 必須設為輸入: IOC6.0=1]
1 ;P60設置為外部中斷輸入引腳 2 MOV A, IOCE 3 OR A, @01000000B 4 MOV IOCE, A
1 ;將P60腳設置為輸入引腳 2 IOR 0X6 3 OR A, @0X01 4 IOW 0X6
IO讀寫
IO輸入輸出寄存器R5、R6
EM78 將 I/O 映射為寄存器來操作,R6 為 8 位,R5 僅有低 4位有效。
循環
(利用一個寄存器為計數器,在程序執行前,先將計數寄存器設為 N,然后每執行一
次,計數器就減一,再調回原函數執行,直到計數器被減至零)
1 ;設計一個 FOR LOOP 循環,讓循環連續執行 10 次。 2 MOV A, @0X0A 3 MOV 0X10, A 4 LOOP: 5 DJZ 0X10 6 JMP LOOP
查表程序
(利用“mov 0x2,a",或“add 0x2,a" 等等指令來改變 PC)
1 ;例:查表 2 table add 0x02,a ;將相對位置加入 PC 而改變了 PC 3 retl @0x19 ;傳回常數內容 19h 至 "A" 4 retl @0x74 ;傳回常數內容 74h 至 "A" 5 retl @0x2e ;傳回常數內容 2eh 至 "A" 6 retl @0x54 ;傳回常數內容 54h 至 "A" 7 retl @0x4b ;傳回常數內容 4bh 至 "A" 8 inc 0x18 9 mov a,0x18 ;欲查的內容的相對位置放在"A" 10 call table ;查表 11 mov 0x10,a ;查表得到的內容移至 R10 中
中斷
1.系統相應中斷的時機:
在每條指令周期中,在最后的階段系統會檢測中斷標志位,如果發生了中斷請求,系統就會保護現場,然后跳轉到中斷程序中執行。
在程序中,每條指令周期的最后階段還是會去檢測中斷標志位,如果沒有禁止中斷,還是可能會進而響應另一個中斷。
相關寄存器:
;控制寄存器是用來控制 I/O 的工作狀態、中斷控制、看門狗控制等, ;其讀寫只能采用指令 I0R R 或 IOW R 來完成
1 CONT
圖(三) CONT(控制寄存器)
使用“ENI”指令時所有中斷被開放,而使用“DISI”指令,則所有中斷被關閉。
2 RF
圖 (四)RF( 中斷狀態寄存器)0x0f
1:有中斷 0:無中斷
Bit0: TCC 計數器 1 溢出中斷標志位; (當 TCC 計數器 1 溢出時置“1”,可由軟件清零。)
Bit1: IO口 6 輸入變化中斷標志位, (當口 6 輸入變化時置“1”,可由軟件清零。 )
Bit2: 外部中斷標志位。 (當 INT 腳有下降沿觸發時置“1”,可用軟件清零。)
·RF 可用軟件清零,但不能被置“1”
·IOCF 為中斷屏蔽寄存器,通過指令讀取 RF 值,此時結果值為 RF 和 IOCF 相與的結果
3 IOCF
圖(五) IOCF(中斷屏蔽寄存器)0x0f (讀為RF,寫為IOCF?)
0:屏蔽
1:允許
Bit0:(TCC 溢出中斷)
Bit1:(P6 口輸入變化中斷)
Bit2:(外部中斷 P60/INT)
IOCF 相應的控制位置“1”、則相應的中斷允許。 (相當於中斷有兩個開關:ENI + IOCF)
;程序初始化(關閉WD,設定地址)、計時器初始化、主循環等待溢出中斷 ;中斷處理程序
1 ;例1(計數器中斷):寫一個程序,將寄存器 0X20 當做計數器,每當 TCC 中斷產生,就自動加 1。 2 MOV A, @0X0 ;A=0 3 IOW 0X0E ;關閉WatchDog 4 ORG 6 ;設定接下來的程序位址 5 CLR 0X20 ;清除寄存器0X20。 6 JMP TCC_PRO ;跳轉到TCCPRO 7 8 INT_PRO: 9 DISI 10 CLR 0X0F 11 INC 0X20 12 RETI ;返回主程序,並使能中斷 13 14 TCC_PRO: 15 CLR 0X0F ;清除中斷寄存器 16 MOV A, @0X01 ;設定 A = 1 17 IOW 0X0F ;使能TCC溢位中斷產生 18 MOV A, @0X40 ;設定 A = 0X40 (0100 0000) 19 CONTW ;將A的值寫入控制寄存器 【分頻器分配給TCC,分頻比1:2,上升沿觸發,使用內部指令周期】 20 ENI ;使能中斷 21 22 TCC_WAIT: 23 NOP 24 NOP 25 JMP TCC_WAIT ;等待TCC計數器計數溢位
TCC 中斷產生有幾個設計的重點:
1. 關閉看門狗計時器(Watch Dog Timer)。
2. 設定控制寄存器(包括預除器、TCC 信號來源、觸發時機…)。
3. 使能中斷(下 ENI 指令)。
4. 使能 TCC 中斷(設定中斷控制寄存器的 bit0 為 1)。
5. 中斷服務位址為 0X08。 【ORG 6 指令后面還有兩條指令】
6. 進入中斷服務程序首先要將中斷禁止,否則會產生重復中斷。
7. 中斷寄存器 0X0F,在進入中斷服務程序時可以提供用戶判斷為何種中斷,判斷完成之后用戶必須自行清除。
8. 由中斷服務程序返回主程序應使用指令 RETI。
1 ;例2(P6引腳變化中斷): 寫一個程序,將寄存器 0X20 當做計數器,每當 PORT6 Change 中斷產生, 2 ;就自動加 1。 3 PORT6 == 6 ;定義。 4 DISI ;中斷禁止。 5 ORG 6 ;設定下一個位址為0X06。 6 CLR 0X20 ;清除計數寄存器。 7 JMP PORT6_CH ;跳轉到主程序。 8 9 10 INT_PRO: ;0X08為中斷服務程序起始。 11 NOP 12 CLR 0X0F ;清除中斷標志寄存器。 13 INC 0X20 ;計數器遞增。 14 MOV PORT6, PORT6 ;將PORT6的值存入正反器。 15 RETI ;回主程序。 16 17 PORT6_CH: 18 CLR 0X0F ;清除中斷標志寄存器。 19 MOV A, @0XFF ;設定 A = 0XFF。 20 IOW PORT6 ;將PORT6設成輸入口。 21 MOV PORT6, PORT6 ;將PORT6的值存入正反器。 22 ENI ;使能中斷 23 MOV A, @0X02 ;設定 A = 0X02。 24 IOW 0X0F ;使能PORT6 Change中斷產生 25 26 27 WAIT_INT: 28 WDTC ;清除Watch Dog Timer 29 NOP 30 NOP ;等待PORT6 Change 31 JMP WAIT_INT ;循環
使用 PORT6 Change 中斷有下列幾個步驟。
1. 關閉看門狗計時器(Watch Dog Timer),若看門狗計時器未關閉,用戶要定時下 WDTC 的指令。
2. 清除中斷寄存器。
3. 設定 PORT6 為輸出口。
4. 將 PORT6 的值存入觸發器中(這很重要)。
5. 使能中斷(下 ENI 的指令)。
6. 使能 PORT6 Change 中斷(設定中斷控制寄存器的 bit1 為 1)。 (從bit0開始)
7. 中斷服務程序的啟始位址在 0X08。
8. 進入中斷服務程序首先要將中斷禁止,否則會產生嵌套中斷。
9. 中斷寄存器 0X0F,在進入中斷服務程序時可以提供用戶判斷為何種中斷,判斷完成之后用戶必須自行清除。
10. 由中斷服務程序返回主程序應使用指令 RETI。
1 ;例3(外部中斷)寫一個程序,將寄存器 0X20 當做計數器, 2 ;每當外部中斷產生,就自動加 1。 3 ORG 6 ;設定啟始位址為0X06 4 CLR 0X20 ;清除計數器 5 JMP EXT_PRO ;跳轉到主程序 6 7 INT_EXT: 8 DISI ;中斷禁止 9 CLR 0X0F ;清除中斷標志 10 INC 0X20 ;遞增計數寄存器 11 RETI ;返回主程序 12 13 EXT_PRO: 14 CLR 0X0F ;清除中斷標志 15 MOV A, @0X04 ;A = 0X04 16 IOW 0X0F ;使能外部中斷信號產生。 17 MOV A, @0X40 ;A = 0X40 18 IOW 0X0E ;設定PORT6, BIT0為中斷輸入腳 19 ENI ;設定PORT6, BIT0為中斷輸入腳 20 21 EXT_WAIT: 22 NOP 23 NOP 24 JMP EX_WAIT ;等待外部中斷輸
總結:、
1.中斷服務程序中:關中斷、請flag、處理、開中斷
2.程序初始化,org處理好中斷處理處理程序的地址、清flag、設置中斷引腳、相關配置、開中斷->主循環
所謂的外部中斷就是利用 IC 外部引腳,針對單片機外部的信號做為信號源來產生中斷。EM78 系列的外部中斷引腳是第 4 腳,
是和 PORT6 位 0 合用,所以再使用前要先設定 PORT6 。
外部中斷顯然比較容易了解。所需注意的有:
1. 禁止中斷。
2. 設定中斷服務程序的地址在 0X08。
3. 清除中斷標志寄存器。
4. 使能外部中斷信號產生(設定中斷控制寄存器為 0X04)。
5. 將 PORT6, BIT0 設定成外部中斷引腳(設定控制寄存器 0X0E, BIT6 為 1)。
6. 使能中斷信號(ENI)。
7. 用戶在進入中斷服務程序(0X08)時,首先要記得禁止中斷(DISI)。
8. 可以由中斷標志寄存器判斷中段的信號為何產生,判斷完之后應自行清除中斷標志。
9. 返回主程序時用指令 RETI。
指令延時
一個精確的控制延遲時間的程序,選擇使用石英振盪器,可以精確的算准延遲時間,時間
可以到 nanosecond(十億分之一秒),很神奇。
1 LP_CNT0 == 0X20 ;定義 2 LP_CNT1 == 0X21 3 MOV A, @2 ;A = 2 4 MOV LP_CNT0, A ;設定延遲寄存器0(LP_CNT0)=2 5 CALL P0_DLY ;呼叫時間延遲子程序
6 P0_DLY: 7 NOP ;調節延遲時間 8 MOV A, @200 ;設定 A = 200 9 MOV LP_CNT1, A;設定寄存器LP_CNT1 = 200
10 P0_LP: 11 NOP ;調節延遲時間 12 NOP ;調節延遲時間 13 NOP ;調節延遲時間 14 DJZ LP_CNT1 ;遞減LP_CNT1,為0就跳過下一行 15 JMP P0_LP ;循環 16 DJZ LP_CNT0 ;遞減LP_CNT0,為0就跳過下一行 17 JMP P0_DLY ;循環 18 RET ;返回主程序
所采用的振盪器為石英振盪(4M Hz),並選擇指令執行周期為 1 Cycle, 2 Clock。
這時每執行一個指令的時間為 0.5 uS.
用戶可以看出在程序中用了兩個寄存器來計數(LP_CNT0、LPCNT1),另外也使用了兩個循環(P0_DLY、P0_LP),其中在 P0_LP 中
有 5 個指令,所以在 P0_LP 這個循環中,執行了有 1000 個指令。
在整個 P0_DLY 循環中就有 2012 個指令,每個指令的執行時間為 0.5 us。
2012 (instructions) x 0.5 (us/instruction) = 1.006 ms
所以用戶可以精確的計算出延遲的時間,用戶可以在 LP_CNT0 設定不同的值,如此可以有各種不同的延遲時間。
1 ;例:設計一個延遲時間為 2ms 的程序。 2 ;只要在上述程序中在呼叫 P0_DEL 延遲子程序之前,將 LP_CNT0 設成 4 就可以了。 3 MOV A, @4 4 MOV LP_CNT0, A 5 CALL P0_DLY 6 ;其余不變。 7 ;1005 X 4 (LP_CNT0 = 4)= 4020。 8 ;4020 + 1 + 1 = 4022。 9 ;4022 (instructions) X 0.5 (us) = 2.011 ms
LED發光二極管中斷實例:
(基於EM78153S)(包含程序現場的保護和還原,A,R3,R4)
源程序:
1 ;********************************************************************** 2 ; 本程序以外部中斷舉例 3 ;上電時P50輸出高,在INT引腳輸入下降沿時進外部中斷,P50輸出翻轉一次。 4 ;********************************************************************** 5 ;MCU: EM78P153S 6 ;Oscillator: IRC 4MHz 7 ;Clock: 2 8 ;WDT: Disable 9 ;編譯軟件: WicePulse version 2.6081015 10 11 INCLUDE "EM78P153S.INC" 12 A_buffer == 0x1C ;保存A寄存器 13 R4_buffer == 0x1D ;保存R4寄存器 14 R3_buffer == 0x1E ;保存R3寄存器 15 16 ORG 0X00 17 JMP INITIAL 18 ORG 0X08 19 EX_INT: 20 MOV A_buffer,A ;保存 A (累加器狀態) 21 SWAPA R3 22 MOV R3_buffer,A ;保存 R3 (狀態寄存器,進位,為零,頁等) 23 MOV A,R4 24 MOV R4_buffer,A ;保存 R4 (間址寄存器) 25 26 JBS EXIF ;查詢有沒有外部中斷標志 27 JMP INT_RET ;如果沒有外部中斷標志退出中斷程序 28 MOV A,ISR ;(先讀出中斷標志,然后將bit2置零) 29 AND A,@0XFB 30 MOV ISR,A ;清除外部中斷標志 31 JBS PORT5,0 ;P50取反(如果P50 =1(燈滅)就置零(亮燈)) 32 JMP $+3 ;(如果P50 = 0(燈亮) 就置一(燈滅)) 33 BC PORT5,0 34 JMP INT_RET 35 BS PORT5,0 36 INT_RET: 37 MOV A,R4_buffer ;返回 R4 (還原程序現場) 38 MOV R4,A 39 SWAPA R3_buffer ;返回 R3 40 MOV R3,A 41 SWAP A_buffer ;返回 A 42 SWAPA A_buffer 43 RETI 44 45 ORG 0X50 46 INITIAL: 47 MOV A,@0 48 CLR PORT5 ;PORT5初始狀態為低電位 49 IOW IOC5 ;PORT5設為輸出,控制LED 50 MOV A,@0XFF 51 IOW IOCD 52 MOV A,@01000000B 53 IOW IOCE ;P60作為/INT中斷輸入引腳 54 CLR ISR ;清除中斷標志位 55 MOV A,@00000100B 56 IOW IMR ;使能外部中斷 57 BS PORT5,0 ;點亮LED 58 ENI ;使能總中斷 59 MAIN: 60 NOP 61 NOP 62 JMP MAIN 63
頭文件EM78P153S.INC:(寄存器地址定義)
1 ;******************************************************; 2 ; Title: EM78P153S include file ; 3 ; Description: The Definition of EM78P153S Registers ; 4 ; Company: ELAN MICROELECTRONICS (SZ) LTD. ; 5 ; Date: 2008/04/16 ; ; 6 ;******************************************************; 7 ; 8 ;======================================================; 9 ; Operational Registers Define R PAGE ; 10 ; Registers R0~R2F ; 11 ;======================================================; 12 ; 13 ; R0/IAR: Indirect Address Register 14 ; 15 R0 == 0X00:rpage 0 16 IAR == 0X00:rpage 0 17 ; 18 ;R1/TCC: Time Clock/Counter 19 ; 20 R1 == 0X01:rpage 0 21 TCC == 0X01:rpage 0 22 ; 23 ; R2/PC: Program Counter & Stack 24 ; 25 R2 == 0x02:rpage 0 26 PC == 0x02:rpage 0 27 ; 28 ;R3/STATUS:Status Register 29 ; 30 R3 == 0X03:rpage 0 31 STATUS == 0X03:rpage 0 32 ;{ 33 RST == STATUS.7 ; Bit for reset type 34 ; Set to 1 if wake-up from sleep mode on pin change 35 ; Set to 0 if wake-up from other reset types 36 GP1 == STATUS.6 ; General purpose read/write bits 37 GP0 == STATUS.5 38 T == STATUS.4 ;Time out bit 39 P == STATUS.3 ;Power down bit 40 Z == STATUS.2 ;Zero flag 41 DC == STATUS.1 ;Auxiliary carry flag 42 C == STATUS.0 ;Carry flag 43 ;} 44 ; 45 ;R4/RSR:RAM Select Register 46 ; 47 R4 == 0X04:rpage 0 48 RSR == 0X04:rpage 0 49 ; Bits 5~0 are used to select registers(address: 00~06,0F~2F)in the indirect addressing mode 50 ; Bits 7~6 are general-purpose read/write bits 51 ; 52 ;R5/PORT5:I/O Register 53 ; 54 R5 == 0X05:rpage 0 55 PORT5 == 0X05:rpage 0 56 ; 57 ;R6/PORT6:I/O Register 58 ; 59 R6 == 0X06:rpage 0 60 PORT6 == 0X06:rpage 0 61 ; 62 ;R7~RE:Reserved 63 ; 64 ;RF/ISR:Interrupt status register 65 ; 66 ISR == 0X0F:rpage 0 67 ;{ 68 ;Bits 7 ~ 3 Not used. 69 ;"1" means interrupt request 70 ;"0" means no interrupt occurs. 71 EXIF == ISR.2 ;External interrupt flag 72 ICIF == ISR.1 ;Port6 input status change interrupt flag 73 TCIF == ISR.0 ;TCC overflow interrupt flag 74 ;} 75 ; 76 ;======================================================; 77 ; Operational Registers Define IOPAGE ; 78 ; Registers R0~RF ; 79 ;======================================================; 80 ; 81 ; A: Accumulator 82 ; It can't be addressed. 83 ; 84 ; CONT: Control Register 85 ; 86 ;{ 87 ; BIT7 not used 88 INTE == 6 ; Interrupt enable flag 89 ; "0" : Masked by DISI or hardware interrupt 90 ; "1" : Enabled by ENI/RETI instructions 91 TS == 5 ; TCC signal source 92 ; "0" : Internal instruction cycle clock,P62 is a bi-directional I/O pin 93 ; "1" : Transition on TCC pin 94 TE == 4 ; TCC signal edge 95 ; "0" : Increment if the transition from low to high takes place on TCC pin 96 ; "1" : Increment if the transition from high to low takes place on TCC pin 97 PAB == 3 ;escaler assignment bit 98 ; "1" : TCC 99 ; "0" : WDT 100 PSR2 == 2 ; 101 PSR1 == 1 ; 102 PSR0 == 0 ; (PSR0~PSR2): TCC/WDT prescaler Select bits 103 ; |------|------|------|----------|----------| 104 ; | PSR2 | PSR1 | PSR0 | TCC Rate | WDT Rate | 105 ; |------|------|------|----------|----------| 106 ; | 0 | 0 | 0 | 1:2 | 1:1 | 107 ; | 0 | 0 | 1 | 1:4 | 1:2 | 108 ; | 0 | 1 | 0 | 1:8 | 1:4 | 109 ; | 0 | 1 | 1 | 1:16 | 1:8 | 110 ; | 1 | 0 | 0 | 1:32 | 1:16 | 111 ; | 1 | 0 | 1 | 1:64 | 1:32 | 112 ; | 1 | 1 | 0 | 1:128 | 1:64 | 113 ; | 1 | 1 | 1 | 1:256 | 1:128 | 114 ; | -----|------|------|----------|----------| 115 ;} 116 ; 117 ; PORT 5 I/O Port Control Register 118 ; 119 IOC5 == 0x05:iopage 0 ; 120 P5CR == 0x05:iopage 0 ; 121 ; 122 ; PORT 6 I/O Port Control Register 123 ; 124 IOC6 == 0x06:iopage 0 ; 125 P6CR == 0x06:iopage 0 ; 126 ; 127 ; IOCB/PDCR: Port 5 and P6 Pull-down Control Register 128 ; 129 IOCB == 0x0B:iopage 0 ; 130 PDCR == 0x0B:iopage 0 ; 131 ; 132 ;{ ; "0": Enable internal pull-down 133 ; "1": Disable internal pull-dowm 134 ; Bit 7 not used 135 PD6B == 6 ; Control bit is used to enable the pull-down of P62 pin 136 PD5B == 5 ; Control bit is used to enable the pull-down of P61 pin 137 PD4B == 4 ; Control bit is used to enable the pull-down of P60 pin 138 ; Bit 3 not used 139 PD2B == 2 ; Control bit is used to enable the pull-down of P52 pin 140 PD1B == 1 ; Control bit is used to enable the pull-down of P51 pin 141 PD0B == 0 ; Control bit is used to enable the pull-down of P50 pin 142 ;} 143 ; 144 ; IOCC/ODCR: Open-drain Control Register 145 ; 146 IOCC == 0x0C:iopage 0 147 ODCR == 0x0C:iopage 0 148 ; 149 ;{ ; "0": Disable internal open-drain 150 ; "1": Enable internal open-drain 151 ; 152 OD7 == 7 ; Control bit is used to enable the open-drain of P67 pin 153 OD6 == 6 ; Control bit is used to enable the open-drain of P66 pin 154 OD5 == 5 ; Control bit is used to enable the open-drain of P65 pin 155 OD4 == 4 ; Control bit is used to enable the open-drain of P64 pin 156 ; Bit 3 not used 157 OD2 == 2 ; Control bit is used to enable the open-drain of P62 pin 158 OD1 == 1 ; Control bit is used to enable the open-drain of P61 pin 159 OD0 == 0 ; Control bit is used to enable the open-drain of P60 pin 160 ;} 161 ; 162 ;IOCD/PHCR:Pull-high Control Register 163 ; 164 ; 165 IOCD == 0x0D:iopage 0 166 PHCR == 0X0D:iopage 0 167 ;{ ; "0": Enable internal pull-HIGH 168 ; "1": Disable internal pull-HIGH 169 PH7B == 7 ; Control bit is used to enable the pull-HIGH of P67 pin 170 PH6B == 6 ; Control bit is used to enable the pull-HIGH of P66 pin 171 PH5B == 5 ; Control bit is used to enable the pull-HIGH of P65 pin 172 PH4B == 4 ; Control bit is used to enable the pull-HIGH of P64 pin 173 ; Bit 3 not used 174 PH2B == 2 ; Control bit is used to enable the pull-HIGH of P62 pin 175 PH1B == 1 ; Control bit is used to enable the pull-HIGH of P61 pin 176 PH0B == 0 ; Control bit is used to enable the pull-HIGH of P60 pin 177 ;} 178 ; 179 ; IOCE/WDTCR: WDT Control Register 180 ; 181 IOCE == 0x0E:iopage 0 182 WDTCR == 0x0E:iopage 0 183 ; 184 ;{ 185 WDTE == 7 ; Control bit is used to enable Watchdog timer 186 ; "0" : Disable WDT 187 ; "1" : Enable WDT 188 EIS == 6 ; Control bit is used to difine the function of P60(/INT)pin 189 ; "0" : P60,biderectional I/O pin 190 ; "1" : /INT,external interrupt pin 191 ; 192 ; Bits 5~0 not used 193 ;} 194 ; 195 ; IOCF/IMR: Interrupt Mask Register 196 ; 197 IOCF == 0x0F:iopage 0 198 IMR == 0x0F:iopage 0 199 ; 200 ;{ 201 ; Bits 7~3 not used 202 ; 203 EXIE == 2 ; External interrupt enable bit (P60) 204 ; "0" : Disable 205 ; "1" : Enable 206 ICIE == 1 ; Port6 input status change interrupt enable bit 207 ; "0" : Disable 208 ; "1" : Enable 209 TCIE == 0 ; TCC overflow interrupt enable bit 210 ; "0" : Disable 211 ; "1" : Enable 212 ;} 213 ; 214 ;********************************************************; 215 ;CLEAR EM78P153S GENERAL REGISTER MACRO PROGRAM ; 216 ; ; 217 ;********************************************************; 218 ; 219 M153SCLRRAMBANK MACRO 220 ; 221 ; 222 MOV A,@0X10 223 MOV RSR,A 224 $_ClrLoop: 225 CLR R0 226 INC RSR 227 JBC RSR,5 228 JBS RSR,4 229 JMP $_ClrLoop 230 ENDM
所有寄存器地址及初值
(IOC5、IOC6需要使用IOR,IOW進行讀寫)