为了正常的体验网站,请在浏览器设置里面开启Javascript功能!
首页 > 4-2led霹雳灯实验

4-2led霹雳灯实验

2018-07-17 10页 doc 61KB 36阅读

用户头像

is_668482

暂无简介

举报
4-2led霹雳灯实验4-2led霹雳灯实验 4-2 LED霹靂燈實驗 4-2-1 目的 介紹查表指令,並利用查表方式讓八顆LED達到各式各樣的燈號效果。 4-2-2 電路圖 圖4-2-1 產生其他各種燈號的變化,「查表法」是最方便的方式,只要事先將所要的燈號變化資料依序存放於程式記憶體(此即所謂「建表」),再由程式控制在適當的時機讀取並由I/O埠送出,就可以讓LED展現不同的顯示效果。 4-2-3 流程圖 4-2-4 程式碼 4-2-4-1 (TRBRD [m]) INCLUDE HT66F70A.INC MY_DAT...
4-2led霹雳灯实验
4-2led霹雳灯实验 4-2 LED霹靂燈實驗 4-2-1 目的 介紹查指令,並利用查表方式讓八顆LED達到各式各樣的燈號效果。 4-2-2 電路圖 圖4-2-1 產生其他各種燈號的變化,「查表法」是最方便的方式,只要事先將所要的燈號變化資料依序存放於程式記憶體(此即所謂「建表」),再由程式控制在適當的時機讀取並由I/O埠送出,就可以讓LED展現不同的顯示效果。 4-2-3 流程圖 4-2-4 程式碼 4-2-4-1 (TRBRD [m]) INCLUDE HT66F70A.INC MY_DATA .SECTION 'DATA' DEL1 DB ? ;定義變數位址 DEL2 DB ? ;定義變數位址 DEL3 DB ? ;定義變數位址 COUNT DB ? ;定義變數位址 LED_PORT EQU PC ;定義LED_PORT等於PC LED_PORTC EQU PCC ;定義LED_PORTC等於PCC ROMBANK 0 MY_CODE MY_CODE .SECTION AT 000H 'CODE' MOV A,0AFH MOV WDTC,A ;關閉看門狗計時器 CLR LED_PORTC ;將LED_PORT規劃為輸出模式 MAIN: MOV A,HIGH TAB_PILI ;將TBHP指向表格(TAB_PILI)起始位址 MOV TBHP,A MOV A,LOW TAB_PILI ;將TBLP指向表格(TAB_PILI)起始位址 MOV TBLP,A MOV A,06 MOV COUNT,A ;將COUNT設定為6 LOOP: TABRD LED_PORT ;依TBHP及TBLP指示之值讀取資料,送至LED_PORT顯示 MOV A,80 CALL DELAY ;呼叫DELAY副程式 INC TBLP ;TBLP加1,指向下一筆顯示資料 SDZ COUNT ;判斷COUNT減1是否為0 JMP LOOP JMP MAIN TAB_PILI: ;LED顯示資料建表區 DC 1B DC 0B DC 0B DC 0B DC 0B DC 0B ;=================================== DELAY PROC ;DELAY副程式 MOV DEL1,A DEL_1: MOV A,3 MOV DEL2,A DEL_2: MOV A,110 MOV DEL3,A DEL_3: SDZ DEL3 JMP DEL_3 SDZ DEL2 JMP DEL_2 SDZ DEL1 JMP DEL_1 RET DELAY ENDP END 建表就是將一些固定不變的常數資料存放在程式記憶體中,當程式運行時再依據實際需求讀出,常見的應 用,七段顯示器、三角函數、指數等,都是可以先將結果計算好加以存放。HT66F70A提供兩個查表指令 (『TABRD[m]』及『TABRDL[m]』)方便使用者使用;以HT66F70A為例,程式記憶體共有4個BANK,每一個BANK 有8192個位置(0000h~1FFFh),固需要兩個暫存器組成13位元做為讀取之位址。當使用『TABRD[m]』指令時,是依據TBHP、TBLP暫存器所指示之位址,將程式記憶體內容讀出,並將低八位元存入資料記憶體m位址中,其餘位元則存入TBLH暫存器。 HT66F70A將程式記憶體以256個位置為單位,稱為『程式頁』;若使用「TABRDL[m]」指令,則是根據TBLP所指示之位址將程式最末頁的內容讀出,並將低八位元存入資料記憶體m位址中,TBHP暫存器的內容不會影響TABRDL指令的執行結果,TBHP、TBLH之關係如下。 指令 晶片 查表資料所在位址 12 11 10 9 8 7 6 5 4 3 2 1 0 TABRD [m] HT66F50 TBHP[4:0] TBLP[7:0] TABRDL [m] 1 1 1 1 1 TBLP[7:0] 通常都習慣把建表資料直接置於程式之後,以增加程式的可讀性,但當程式經過多次修改,可能會產生跨頁的現象,又少指令的判定,就無法取得正確資料,要特別注意。為避免此問題,建議把資料存放在程式記憶體的最末頁,用『TABRDL[m]』指令來讀取資料,程式碼如下。 4-2-4-2 (TABRDL [M]) INCLUDE HT66F70A.INC MY_DATA .SECTION 'DATA' DEL1 DB ? ;定義變數位址 DEL2 DB ? ;定義變數位址 DEL3 DB ? ;定義變數位址 COUNT DB ? ;定義變數位址 LED_PORT EQU PC ;定義LED_PORT為PC LED_PORTC EQU PCC ;定義LED_PORTC為PCC ROMBANK 0 MY_CODE MY_CODE .SECTION AT 000H 'CODE' MOV A,0AFH MOV WDTC,A CLR LED_PORTC ;將LED_PORT規劃為輸出模式 MAIN: MOV A,LOW TAB_PILI ;將TBLP指向表格(TAB_PILI)起始位址 MOV TBLP,A MOV A,06 MOV COUNT,A ;將COUNT設定為6 LOOP: TABRDL LED_PORT ;依TBLP之值讀取資料,並送至LED_PORT MOV A,80 CALL DELAY ;呼叫DELAY副程式 INC TBLP ;將TBLP加1,指向下一筆資料 SDZ COUNT ;判斷COUNT減1是否等於0,成立就跳至MAIN, JMP LOOP ; 不成立就跳至LOOP JMP MAIN ;==================================== DELAY PROC ;DELAY副程式 MOV DEL1,A DEL_1: MOV A,3 MOV DEL2,A DEL_2: MOV A,110 MOV DEL3,A DEL_3: SDZ DEL3 JMP DEL_3 SDZ DEL2 JMP DEL_2 SDZ DEL1 JMP DEL_1 RET DELAY ENDP ROMBANK 3 MY_CODE1 MY_CODE1 .SECTION AT 1F00H 'CODE' TAB_PILI: ;LED顯示資料建表區 DC 1B DC 0B DC 0B DC 0B DC 0B DC 0B END 程式4-2-4-1 跟4-2-4-2 的差異有兩點:第一是改用『TABRDL [m]』指令來讀取資料,第二是利用 ROMBANK 3 MY_CODE1 MY_CODE1 .SECTION AT 1F00H 'CODE' 將資料擺到程式記憶體的最後一頁,使用『TABRDL[m]』指令不用理會TBHP暫存器,可使程式更簡潔。 不管是『TABRDL[m]』或『TABRD[m]』,在循序讀取表格資料時,可以直接利用遞增或遞減指令來更改指標值,可說是相當方便,要注意跨頁現象,如果想要隨機讀取表格內的資料,使用上述的指 令就有點慢,所以HT66F70A的程式計數器PCL是可以當成一般暫存器來運算,若能好好利用,也可以做為查表的另一項選擇,尤其在隨機讀取資料時更顯為其功效,請參考如下。 4-2-4-3 (ADDM A,PCL) INCLUDE HT66F70A.INC MY_DATA .SECTION 'DATA' DEL1 DB ? ;定義變數位址 DEL2 DB ? ;定義變數位址 DEL3 DB ? ;定義變數位址 COUNT DB ? ;定義變數位址 INDEX DB ? ;定義變數位址 LED_PORT EQU PC ;定義LED_PORT為PC LED_PORTC EQU PCC ;定義LED_PORTC為PCC ROMBANK 0 MY_CODE MY_CODE .SECTION AT 000H 'CODE' MOV A,0AFH MOV WDTC,A CLR LED_PORTC ;將LED_PORT規劃為輸出模式 MAIN: CLR INDEX ;將INDEX清除為0 MOV A,06 MOV COUNT,A ;將COUNT設定為6 LOOP: MOV A,INDEX CALL TRANS_PILI ;呼叫TRANS_PILI MOV LED_PORT,A MOV A,80 CALL DELAY ;呼叫DELAY副程式 INC INDEX ;INDEX加1 SDZ COUNT ;判斷COUNT減1是否為0,成立就跳至MAIN, JMP LOOP ; 不成立就跳至LOOP JMP MAIN ;====================================== DELAY PROC ;DELAY副程式 MOV DEL1,A DEL_1: MOV A,3 MOV DEL2,A DEL_2: MOV A,110 MOV DEL3,A DEL_3: SDZ DEL3 JMP DEL_3 SDZ DEL2 JMP DEL_2 SDZ DEL1 JMP DEL_1 RET DELAY ENDP TRANS_PILI PROC ;LED顯示資料建表區 ADDM A,PCL RET A,10000001B RET A,01000010B RET A,00100100B RET A,00011000B RET A,00100100B RET A,01000010B TRANS_PILI ENDP END TRANS_PILI副程式,當Acc=0執行『ADDM A,PCL』後,就接著執行『RET A,10000001B』回到 主程式,並在Acc載入表中第一筆顯示值『10000001B』;同理當Acc=1執行『ADDM A,PCL』後,就 接著執行『RET A,01000010B』回到主程式,此時Acc載入表中第二筆顯示值『01000010b』,依此類 推。此種查表方式是利用改變PCL而達到改變程式流程的目的,一般稱之為『計算式跳躍』。
/
本文档为【4-2led霹雳灯实验】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索