有幾個程序的標(biāo)號我不能理解,望指點一下
LP1: MOV MO,A
LP2: JNC LP1
TAB: AJMP ROUT1
HADD: MOV R1,A
LP: MOV A, @RO
CHA: MOV DPTR #TAB
CHB: ADD A,#02H
MAIN: MOV RO,#50H
SUBR: CLR C
MEM0:MOV A, @R0
BUSB: MOV R3 #N
LOOP: MOV A,#99
謝謝各位大哥
匯編語言的大師請進,我是一個剛學(xué)的新生請指點一二
全部回復(fù)(71)
正序查看
倒序查看
@njyd
好象是電源電壓(5V),具體要查手冊. D/A片子電源與89c51不一定是一樣的.
謝謝您的熱心回復(fù),我還有一個問題,就是TABLE指針的問題,表是存在堆棧里呢?還是在ROM中的我一直很迷糊.有這樣的一個程序您幫我解釋下:(這是一個99秒倒計數(shù)程序,8051+7447的硬件電路全文我沒有全部上傳只是倒計時部份)
A1:MOV 20H,#10
MOV 21H,#10
MOV A,20H
MOV DPTR,#TABLE
MOVC A.@A+DPTR
ADD A,#10H 數(shù)據(jù)碼加上掃描值
MOV P2,A 顯示
CALL DELAY 調(diào)用延時掃描
ANL P2,#00H 屏幕清零
MOV A,21H
MOV DPTR,#TABLE
MOVC A.@A+DPTR
ADD,#20H
MOV P2,A
CALL DELAY 調(diào)用延時
ANL P2,#00H
MOV A,#01 從這一步我就有點模糊了
CJNE A,21H,A1 #10與#01比較不相等轉(zhuǎn)到A1我是這里
MOV A,01 不懂,是不是表被壓在堆棧里了,我
CJNE A,20H,A1 想只有壓在堆棧里時才有取一個數(shù)碼
JMP START 跳到啟始 堆棧指針才會減一呀.如果在ROM里
指針只會加一呀(我有點暈)
TABLE: DB 00H,00H,01H,02H,03H,04H
DB 05H,06H,07H,08H,09H
A1:MOV 20H,#10
MOV 21H,#10
MOV A,20H
MOV DPTR,#TABLE
MOVC A.@A+DPTR
ADD A,#10H 數(shù)據(jù)碼加上掃描值
MOV P2,A 顯示
CALL DELAY 調(diào)用延時掃描
ANL P2,#00H 屏幕清零
MOV A,21H
MOV DPTR,#TABLE
MOVC A.@A+DPTR
ADD,#20H
MOV P2,A
CALL DELAY 調(diào)用延時
ANL P2,#00H
MOV A,#01 從這一步我就有點模糊了
CJNE A,21H,A1 #10與#01比較不相等轉(zhuǎn)到A1我是這里
MOV A,01 不懂,是不是表被壓在堆棧里了,我
CJNE A,20H,A1 想只有壓在堆棧里時才有取一個數(shù)碼
JMP START 跳到啟始 堆棧指針才會減一呀.如果在ROM里
指針只會加一呀(我有點暈)
TABLE: DB 00H,00H,01H,02H,03H,04H
DB 05H,06H,07H,08H,09H
0
回復(fù)
@hyjs111
謝謝您的熱心回復(fù),我還有一個問題,就是TABLE指針的問題,表是存在堆棧里呢?還是在ROM中的我一直很迷糊.有這樣的一個程序您幫我解釋下:(這是一個99秒倒計數(shù)程序,8051+7447的硬件電路全文我沒有全部上傳只是倒計時部份)A1:MOV 20H,#10 MOV 21H,#10 MOV A,20H MOV DPTR,#TABLE MOVCA.@A+DPTR ADD A,#10H 數(shù)據(jù)碼加上掃描值 MOV P2,A 顯示 CALLDELAY 調(diào)用延時掃描 ANL P2,#00H 屏幕清零 MOV A,21H MOV DPTR,#TABLE MOVCA.@A+DPTR ADD,#20H MOV P2,A CALLDELAY 調(diào)用延時 ANL P2,#00H MOV A,#01 從這一步我就有點模糊了 CJNEA,21H,A1 #10與#01比較不相等轉(zhuǎn)到A1我是這里 MOV A,01 不懂,是不是表被壓在堆棧里了,我 CJNEA,20H,A1 想只有壓在堆棧里時才有取一個數(shù)碼 JMP START 跳到啟始 堆棧指針才會減一呀.如果在ROM里 指針只會加一呀(我有點暈)TABLE:DB 00H,00H,01H,02H,03H,04H DB 05H,06H,07H,08H,09H
不要把我當(dāng)高手,不經(jīng)常干這個,要騙程的時候還要拿一本手冊隨時查看.
這段程序中好象沒有與堆棧有關(guān)的操作.
這段程序試運行過沒有?
一般來說,用#01與21H比較轉(zhuǎn)移程序中應(yīng)該有對21H的操作,否則是多余的,但我沒找到.會不會在子程序DELAY中有?
下面用01和20H比較也沒見對01和21H地址的操作.
有點暈.
這段程序中好象沒有與堆棧有關(guān)的操作.
這段程序試運行過沒有?
一般來說,用#01與21H比較轉(zhuǎn)移程序中應(yīng)該有對21H的操作,否則是多余的,但我沒找到.會不會在子程序DELAY中有?
下面用01和20H比較也沒見對01和21H地址的操作.
有點暈.
0
回復(fù)
@njyd
不要把我當(dāng)高手,不經(jīng)常干這個,要騙程的時候還要拿一本手冊隨時查看. 這段程序中好象沒有與堆棧有關(guān)的操作. 這段程序試運行過沒有? 一般來說,用#01與21H比較轉(zhuǎn)移程序中應(yīng)該有對21H的操作,否則是多余的,但我沒找到.會不會在子程序DELAY中有? 下面用01和20H比較也沒見對01和21H地址的操作. 有點暈.
我正在學(xué)96系列的有幾個問題想請教一下,
1何為嵌入式單片機
2.高速輸入通道(HSI)高速輸出通道(HSO)
3.程序計數(shù)器(PC)輔有增量器
1何為嵌入式單片機
2.高速輸入通道(HSI)高速輸出通道(HSO)
3.程序計數(shù)器(PC)輔有增量器
0
回復(fù)
@hyjs111
謝謝您的熱心回復(fù),我還有一個問題,就是TABLE指針的問題,表是存在堆棧里呢?還是在ROM中的我一直很迷糊.有這樣的一個程序您幫我解釋下:(這是一個99秒倒計數(shù)程序,8051+7447的硬件電路全文我沒有全部上傳只是倒計時部份)A1:MOV 20H,#10 MOV 21H,#10 MOV A,20H MOV DPTR,#TABLE MOVCA.@A+DPTR ADD A,#10H 數(shù)據(jù)碼加上掃描值 MOV P2,A 顯示 CALLDELAY 調(diào)用延時掃描 ANL P2,#00H 屏幕清零 MOV A,21H MOV DPTR,#TABLE MOVCA.@A+DPTR ADD,#20H MOV P2,A CALLDELAY 調(diào)用延時 ANL P2,#00H MOV A,#01 從這一步我就有點模糊了 CJNEA,21H,A1 #10與#01比較不相等轉(zhuǎn)到A1我是這里 MOV A,01 不懂,是不是表被壓在堆棧里了,我 CJNEA,20H,A1 想只有壓在堆棧里時才有取一個數(shù)碼 JMP START 跳到啟始 堆棧指針才會減一呀.如果在ROM里 指針只會加一呀(我有點暈)TABLE:DB 00H,00H,01H,02H,03H,04H DB 05H,06H,07H,08H,09H
當(dāng)然存在ROM中,用散轉(zhuǎn)指令查表.
0
回復(fù)
@njyd
96沒玩過,對你的問題不大清楚. 我的理解: 嵌入式單片機應(yīng)該是專為某個系統(tǒng)設(shè)計,集成于這個系統(tǒng)中.相對于通用式. 輸入輸出通道的速度是相對的,說高速應(yīng)該是相對于現(xiàn)在常用的速度(同類型).應(yīng)該是個類別,具體的實現(xiàn)要看具體說明.
關(guān)于串口通訊(如附檔所示)如8051輸出一個11111110,那么第一個二極管能點亮嗎?書上有我的點暈1139013857.xls
0
回復(fù)
@njyd
96沒玩過,對你的問題不大清楚. 我的理解: 嵌入式單片機應(yīng)該是專為某個系統(tǒng)設(shè)計,集成于這個系統(tǒng)中.相對于通用式. 輸入輸出通道的速度是相對的,說高速應(yīng)該是相對于現(xiàn)在常用的速度(同類型).應(yīng)該是個類別,具體的實現(xiàn)要看具體說明.
大哥我還有兩個問題,不好意思打擾了
1.假如我編一個程序如何知道在燒寫后占用了程序儲存器的多少空間
2.MOVX,訪問外部存儲器如何知道外部存儲器的地址的,又如何編寫外部存儲器的程序,書上有可我看的有點不明白,希望您指點一下
祝:大哥新年快樂,在新的一年里事業(yè)有成
小弟:韓愈
敬呈
1.假如我編一個程序如何知道在燒寫后占用了程序儲存器的多少空間
2.MOVX,訪問外部存儲器如何知道外部存儲器的地址的,又如何編寫外部存儲器的程序,書上有可我看的有點不明白,希望您指點一下
祝:大哥新年快樂,在新的一年里事業(yè)有成
小弟:韓愈
敬呈
0
回復(fù)
@hyjs111
大哥我還有兩個問題,不好意思打擾了1.假如我編一個程序如何知道在燒寫后占用了程序儲存器的多少空間2.MOVX,訪問外部存儲器如何知道外部存儲器的地址的,又如何編寫外部存儲器的程序,書上有可我看的有點不明白,希望您指點一下 祝:大哥新年快樂,在新的一年里事業(yè)有成 小弟:韓愈 敬呈
“關(guān)于串口通訊(如附檔所示)如8051輸出一個11111110,那么第一個二極管能點亮嗎?”
你這是并行輸出,不是串行.
如果用P0口做輸出,程序就是這樣寫.單片機的輸出口只能帶8個LSTTL的輸入,電流只有幾mA,直接帶LED不夠,需要加緩沖.是0還是1點亮就要看你的緩沖電路.
“1.假如我編一個程序如何知道在燒寫后占用了程序儲存器的多少空間 ”
編譯完成后就可看到目標(biāo)文件的長度,就是占用的空間.
“2.MOVX,訪問外部存儲器如何知道外部存儲器的地址的,又如何編寫外部存儲器的程序,”
MOVX是訪問外部*數(shù)據(jù)*存儲器,這和硬件設(shè)計有關(guān).如果是數(shù)據(jù)存儲器你只要知道大小就行了,如果作為IO口就要看硬件是怎么做的.
外部數(shù)據(jù)存儲器只要用MOVX去讀寫就行了.
如果是程序存儲器,就由EA腳電平(硬件接高電平還是低電平)決定.
如果EA腳高電平而且程序計數(shù)器不高于內(nèi)部ROM的大小,則是訪問內(nèi)部ROM.
如果EA腳低電平則全部是訪問外部ROM.
如果程序計數(shù)器高于內(nèi)部ROM的大小,不論EA腳電平高低都訪問外部ROM.
使用內(nèi)外程序存儲器的程序編寫沒有不同之處.
你這是并行輸出,不是串行.
如果用P0口做輸出,程序就是這樣寫.單片機的輸出口只能帶8個LSTTL的輸入,電流只有幾mA,直接帶LED不夠,需要加緩沖.是0還是1點亮就要看你的緩沖電路.
“1.假如我編一個程序如何知道在燒寫后占用了程序儲存器的多少空間 ”
編譯完成后就可看到目標(biāo)文件的長度,就是占用的空間.
“2.MOVX,訪問外部存儲器如何知道外部存儲器的地址的,又如何編寫外部存儲器的程序,”
MOVX是訪問外部*數(shù)據(jù)*存儲器,這和硬件設(shè)計有關(guān).如果是數(shù)據(jù)存儲器你只要知道大小就行了,如果作為IO口就要看硬件是怎么做的.
外部數(shù)據(jù)存儲器只要用MOVX去讀寫就行了.
如果是程序存儲器,就由EA腳電平(硬件接高電平還是低電平)決定.
如果EA腳高電平而且程序計數(shù)器不高于內(nèi)部ROM的大小,則是訪問內(nèi)部ROM.
如果EA腳低電平則全部是訪問外部ROM.
如果程序計數(shù)器高于內(nèi)部ROM的大小,不論EA腳電平高低都訪問外部ROM.
使用內(nèi)外程序存儲器的程序編寫沒有不同之處.
0
回復(fù)
@njyd
“關(guān)于串口通訊(如附檔所示)如8051輸出一個11111110,那么第一個二極管能點亮嗎?” 你這是并行輸出,不是串行. 如果用P0口做輸出,程序就是這樣寫.單片機的輸出口只能帶8個LSTTL的輸入,電流只有幾mA,直接帶LED不夠,需要加緩沖.是0還是1點亮就要看你的緩沖電路.“1.假如我編一個程序如何知道在燒寫后占用了程序儲存器的多少空間” 編譯完成后就可看到目標(biāo)文件的長度,就是占用的空間.“2.MOVX,訪問外部存儲器如何知道外部存儲器的地址的,又如何編寫外部存儲器的程序,” MOVX是訪問外部*數(shù)據(jù)*存儲器,這和硬件設(shè)計有關(guān).如果是數(shù)據(jù)存儲器你只要知道大小就行了,如果作為IO口就要看硬件是怎么做的. 外部數(shù)據(jù)存儲器只要用MOVX去讀寫就行了. 如果是程序存儲器,就由EA腳電平(硬件接高電平還是低電平)決定. 如果EA腳高電平而且程序計數(shù)器不高于內(nèi)部ROM的大小,則是訪問內(nèi)部ROM. 如果EA腳低電平則全部是訪問外部ROM. 如果程序計數(shù)器高于內(nèi)部ROM的大小,不論EA腳電平高低都訪問外部ROM. 使用內(nèi)外程序存儲器的程序編寫沒有不同之處.
我知道了
就是外部程序存儲器的編寫我還是有點模糊,我也不知道在哪里模糊能給我編個具體的例子嗎?
就是外部程序存儲器的編寫我還是有點模糊,我也不知道在哪里模糊能給我編個具體的例子嗎?
0
回復(fù)
@hyjs
我還有一個問題要請教,就是假如有一程序是時鐘程序但是我現(xiàn)在單片機需要進行其它的程序而產(chǎn)生中斷,時鐘程序進行壓棧后是否還會計時程序操作,如果不的話,顯示是否就不準(zhǔn)了.
定時準(zhǔn)不準(zhǔn)主要在定時(計數(shù))器,只要定時器的運行方式正確不管你運行什么程序計時器一直在工作.只要在兩次定時中斷間能響應(yīng)中斷,時鐘就不會不準(zhǔn).
程序影響到時鐘精確度有以下幾個原因:
1、較高等級中斷執(zhí)行時間過長,造成兩次定時中斷間不能響應(yīng)定時中斷,因此少了一段時間.
解決方法:把定時器中斷等級設(shè)為最高;或者減短中斷執(zhí)行程序,最極端的是在中斷執(zhí)行程序中只記個中斷次數(shù)標(biāo)記,到主程序中根據(jù)標(biāo)記作其他操作.
具體到你的問題,其他中斷返回后繼續(xù)執(zhí)行被中斷的時鐘程序,只要總的時間短于一次定時就不會影響時鐘顯示.
2、定時數(shù)據(jù)計算錯誤.
3、這個問題往往會被忽略.51系列單片機的定時器8位定時計數(shù)到零時可自動寫入定時數(shù).16位定時就不行,計數(shù)到零發(fā)出中斷信號后繼續(xù)計數(shù),定時數(shù)據(jù)需要在每次中斷時在程序中重新寫入.一般來說定時中斷不大可能在第一時間響應(yīng),這就產(chǎn)生了時間差.
解決方法是在每次寫入定時數(shù)據(jù)前讀一下計時器計數(shù),這個數(shù)就是從發(fā)出中斷信號到你準(zhǔn)備重新寫入定時數(shù)據(jù)的間,把你的定時數(shù)據(jù)減去這個數(shù)后再寫入就行了.
當(dāng)然也有不用定時器而是用一小段程序的執(zhí)行時間來延時,這時如果響應(yīng)了中斷當(dāng)然時間就不準(zhǔn)了.這種方法只用于需要等待一段很短時間的時候,用于時鐘顯示肯定是不行的.除非你的單片機除了時鐘外其他什么都沒有,但計算起來也是很麻煩.
程序影響到時鐘精確度有以下幾個原因:
1、較高等級中斷執(zhí)行時間過長,造成兩次定時中斷間不能響應(yīng)定時中斷,因此少了一段時間.
解決方法:把定時器中斷等級設(shè)為最高;或者減短中斷執(zhí)行程序,最極端的是在中斷執(zhí)行程序中只記個中斷次數(shù)標(biāo)記,到主程序中根據(jù)標(biāo)記作其他操作.
具體到你的問題,其他中斷返回后繼續(xù)執(zhí)行被中斷的時鐘程序,只要總的時間短于一次定時就不會影響時鐘顯示.
2、定時數(shù)據(jù)計算錯誤.
3、這個問題往往會被忽略.51系列單片機的定時器8位定時計數(shù)到零時可自動寫入定時數(shù).16位定時就不行,計數(shù)到零發(fā)出中斷信號后繼續(xù)計數(shù),定時數(shù)據(jù)需要在每次中斷時在程序中重新寫入.一般來說定時中斷不大可能在第一時間響應(yīng),這就產(chǎn)生了時間差.
解決方法是在每次寫入定時數(shù)據(jù)前讀一下計時器計數(shù),這個數(shù)就是從發(fā)出中斷信號到你準(zhǔn)備重新寫入定時數(shù)據(jù)的間,把你的定時數(shù)據(jù)減去這個數(shù)后再寫入就行了.
當(dāng)然也有不用定時器而是用一小段程序的執(zhí)行時間來延時,這時如果響應(yīng)了中斷當(dāng)然時間就不準(zhǔn)了.這種方法只用于需要等待一段很短時間的時候,用于時鐘顯示肯定是不行的.除非你的單片機除了時鐘外其他什么都沒有,但計算起來也是很麻煩.
0
回復(fù)
@njyd
定時準(zhǔn)不準(zhǔn)主要在定時(計數(shù))器,只要定時器的運行方式正確不管你運行什么程序計時器一直在工作.只要在兩次定時中斷間能響應(yīng)中斷,時鐘就不會不準(zhǔn). 程序影響到時鐘精確度有以下幾個原因: 1、較高等級中斷執(zhí)行時間過長,造成兩次定時中斷間不能響應(yīng)定時中斷,因此少了一段時間. 解決方法:把定時器中斷等級設(shè)為最高;或者減短中斷執(zhí)行程序,最極端的是在中斷執(zhí)行程序中只記個中斷次數(shù)標(biāo)記,到主程序中根據(jù)標(biāo)記作其他操作. 具體到你的問題,其他中斷返回后繼續(xù)執(zhí)行被中斷的時鐘程序,只要總的時間短于一次定時就不會影響時鐘顯示. 2、定時數(shù)據(jù)計算錯誤. 3、這個問題往往會被忽略.51系列單片機的定時器8位定時計數(shù)到零時可自動寫入定時數(shù).16位定時就不行,計數(shù)到零發(fā)出中斷信號后繼續(xù)計數(shù),定時數(shù)據(jù)需要在每次中斷時在程序中重新寫入.一般來說定時中斷不大可能在第一時間響應(yīng),這就產(chǎn)生了時間差. 解決方法是在每次寫入定時數(shù)據(jù)前讀一下計時器計數(shù),這個數(shù)就是從發(fā)出中斷信號到你準(zhǔn)備重新寫入定時數(shù)據(jù)的間,把你的定時數(shù)據(jù)減去這個數(shù)后再寫入就行了. 當(dāng)然也有不用定時器而是用一小段程序的執(zhí)行時間來延時,這時如果響應(yīng)了中斷當(dāng)然時間就不準(zhǔn)了.這種方法只用于需要等待一段很短時間的時候,用于時鐘顯示肯定是不行的.除非你的單片機除了時鐘外其他什么都沒有,但計算起來也是很麻煩.
謝謝!我明白了
我是做汽車音響的其中有的是電調(diào)諧的,有時鐘顯示,電子調(diào)頻,音頻頻率顯示,頻譜顯示,正反轉(zhuǎn)顯示...工作是這樣的時鐘顯示和音頻頻率顯示是LCD同一地方顯示,其余的不在同一地方顯示,在不開收音的情況下是優(yōu)顯時鐘(放音也顯時鐘)在放音時顯頻率的其中有一個開關(guān)是控制時鐘(CLOCK)和調(diào)頻調(diào)幅(AM/FM)的,在音頻顯示時只要按下CLOCK的鍵就會顯時鐘,不管收音正在進行還是在其它狀態(tài),在顯示頻率的這一段時間內(nèi)(很長)會不會對時鐘精度影響
我是做汽車音響的其中有的是電調(diào)諧的,有時鐘顯示,電子調(diào)頻,音頻頻率顯示,頻譜顯示,正反轉(zhuǎn)顯示...工作是這樣的時鐘顯示和音頻頻率顯示是LCD同一地方顯示,其余的不在同一地方顯示,在不開收音的情況下是優(yōu)顯時鐘(放音也顯時鐘)在放音時顯頻率的其中有一個開關(guān)是控制時鐘(CLOCK)和調(diào)頻調(diào)幅(AM/FM)的,在音頻顯示時只要按下CLOCK的鍵就會顯時鐘,不管收音正在進行還是在其它狀態(tài),在顯示頻率的這一段時間內(nèi)(很長)會不會對時鐘精度影響
0
回復(fù)
@hyjs111
謝謝!我明白了我是做汽車音響的其中有的是電調(diào)諧的,有時鐘顯示,電子調(diào)頻,音頻頻率顯示,頻譜顯示,正反轉(zhuǎn)顯示...工作是這樣的時鐘顯示和音頻頻率顯示是LCD同一地方顯示,其余的不在同一地方顯示,在不開收音的情況下是優(yōu)顯時鐘(放音也顯時鐘)在放音時顯頻率的其中有一個開關(guān)是控制時鐘(CLOCK)和調(diào)頻調(diào)幅(AM/FM)的,在音頻顯示時只要按下CLOCK的鍵就會顯時鐘,不管收音正在進行還是在其它狀態(tài),在顯示頻率的這一段時間內(nèi)(很長)會不會對時鐘精度影響
時鐘程序是單獨的,用一個實時器定時,定時器中斷程序中計總定時數(shù),需要顯示時讀出總定時數(shù)經(jīng)計算后顯示.不管當(dāng)時顯示的是什么內(nèi)容內(nèi)部定時器中斷還在不斷地運行,所以不會對時鐘有影響.
以上是只用單片機計時的情況,單片機一斷電計時就停止,下一次開機又從零開始,所以現(xiàn)在不用此辦法.
現(xiàn)在電器中的時鐘(不是指計算機時序的是鐘)是單獨一個時鐘芯片,有充電電池供電,計時與計算機無關(guān).可以單獨顯示,也可以用計算機(單片機)讀出時鐘芯片中的時間數(shù)據(jù)后再送到顯示單元.這樣即使斷電很長時間是鐘還是在正常走.
你的汽車音響肯定是用的后一種方法,任何操作不會影響時間精度.
以上是只用單片機計時的情況,單片機一斷電計時就停止,下一次開機又從零開始,所以現(xiàn)在不用此辦法.
現(xiàn)在電器中的時鐘(不是指計算機時序的是鐘)是單獨一個時鐘芯片,有充電電池供電,計時與計算機無關(guān).可以單獨顯示,也可以用計算機(單片機)讀出時鐘芯片中的時間數(shù)據(jù)后再送到顯示單元.這樣即使斷電很長時間是鐘還是在正常走.
你的汽車音響肯定是用的后一種方法,任何操作不會影響時間精度.
0
回復(fù)
@njyd
時鐘程序是單獨的,用一個實時器定時,定時器中斷程序中計總定時數(shù),需要顯示時讀出總定時數(shù)經(jīng)計算后顯示.不管當(dāng)時顯示的是什么內(nèi)容內(nèi)部定時器中斷還在不斷地運行,所以不會對時鐘有影響. 以上是只用單片機計時的情況,單片機一斷電計時就停止,下一次開機又從零開始,所以現(xiàn)在不用此辦法. 現(xiàn)在電器中的時鐘(不是指計算機時序的是鐘)是單獨一個時鐘芯片,有充電電池供電,計時與計算機無關(guān).可以單獨顯示,也可以用計算機(單片機)讀出時鐘芯片中的時間數(shù)據(jù)后再送到顯示單元.這樣即使斷電很長時間是鐘還是在正常走. 你的汽車音響肯定是用的后一種方法,任何操作不會影響時間精度.
是的我們用的時鐘備用電源,時鐘顯示是單獨的一根電源線不經(jīng)過車鑰匙控制
0
回復(fù)
@hyjs111
我還想問下偽指令問題,STA EQU 3編譯過來是將3賦給STA嗎3表示的是十進制數(shù)嗎?說真的我連編程器都不會用呢?到現(xiàn)在我學(xué)的都是理論,您能給我解釋一下嗎?
STA EQU 3
EQU編譯后不產(chǎn)生代碼.
這句的作用是使“STA”這個字符串代表3,或者說是代替3這個數(shù).編譯程序在這句以后都把這個字符串看成是3.
也可以認為是將3這個數(shù)賦值給STA,但是在編譯過程中而不是編譯后.
一般用法:
如果你的源程序中經(jīng)常用到一個直接數(shù),用它以后所有這個數(shù)都可以用同一個字符串代替,有利于注釋、讀程序.
如果有一個數(shù)或多次用到的數(shù)在調(diào)試中可能要經(jīng)常改變,比如說某個值的上限、下限等.如果直接寫這個數(shù)在調(diào)試中需要改變時就要找到它修改,如果多處用到還要全部找到,很容易漏掉.使用EQU后需要修改時只要把這一句改一下就行了.
EQU編譯后不產(chǎn)生代碼.
這句的作用是使“STA”這個字符串代表3,或者說是代替3這個數(shù).編譯程序在這句以后都把這個字符串看成是3.
也可以認為是將3這個數(shù)賦值給STA,但是在編譯過程中而不是編譯后.
一般用法:
如果你的源程序中經(jīng)常用到一個直接數(shù),用它以后所有這個數(shù)都可以用同一個字符串代替,有利于注釋、讀程序.
如果有一個數(shù)或多次用到的數(shù)在調(diào)試中可能要經(jīng)常改變,比如說某個值的上限、下限等.如果直接寫這個數(shù)在調(diào)試中需要改變時就要找到它修改,如果多處用到還要全部找到,很容易漏掉.使用EQU后需要修改時只要把這一句改一下就行了.
0
回復(fù)
@hyjs111
謝謝您的熱心回復(fù),我還有一個問題,就是TABLE指針的問題,表是存在堆棧里呢?還是在ROM中的我一直很迷糊.有這樣的一個程序您幫我解釋下:(這是一個99秒倒計數(shù)程序,8051+7447的硬件電路全文我沒有全部上傳只是倒計時部份)A1:MOV 20H,#10 MOV 21H,#10 MOV A,20H MOV DPTR,#TABLE MOVCA.@A+DPTR ADD A,#10H 數(shù)據(jù)碼加上掃描值 MOV P2,A 顯示 CALLDELAY 調(diào)用延時掃描 ANL P2,#00H 屏幕清零 MOV A,21H MOV DPTR,#TABLE MOVCA.@A+DPTR ADD,#20H MOV P2,A CALLDELAY 調(diào)用延時 ANL P2,#00H MOV A,#01 從這一步我就有點模糊了 CJNEA,21H,A1 #10與#01比較不相等轉(zhuǎn)到A1我是這里 MOV A,01 不懂,是不是表被壓在堆棧里了,我 CJNEA,20H,A1 想只有壓在堆棧里時才有取一個數(shù)碼 JMP START 跳到啟始 堆棧指針才會減一呀.如果在ROM里 指針只會加一呀(我有點暈)TABLE:DB 00H,00H,01H,02H,03H,04H DB 05H,06H,07H,08H,09H
你的程序能編譯通過就怪了
0
回復(fù)