我今年52歲學了十天單片機,有個問題請各位老師指教謝了.
各位老師好:硬件學完了,問題不大.軟件也學完了(好幾個通宵呢)遇到麻凡了.各個部分學完了(主程序.子程序.寄存器定意.I/O口設值.AD設值.時鐘設值.)我要想編個程序試試了,可腦子亂了這么多程序部分哪個在前哪個在后分不清了.是主程序在前還是各種定意在前應該是先運行主程序,我又覺著不對不定意主程序砸運行一頭霧水,請指教謝了.
全部回復(103)
正序查看
倒序查看
@zbdxdxkj
各位老師好:我想了好久終于知到這個問題怎樣問了, 寄存器定意.I/O口.模數轉換命令是不是應該寫在ROM中是在ORG(主程序之前嗎?請指教謝了.
是的,另外,已經預定義過的就不必再次定義.
比如:
$mod51 ;或者#include等,以編譯器不同而不同
Counter data 35H
Flagreg data 20H
……
MyBit0 bit 00H
MyBit1 bit Flagreg.1 ;即01H位
……
MyConst equ 126
……
org 0H
jmp Start
org 03H
jmp IntX0
……
比如:
$mod51 ;或者#include
Counter data 35H
Flagreg data 20H
……
MyBit0 bit 00H
MyBit1 bit Flagreg.1 ;即01H位
……
MyConst equ 126
……
org 0H
jmp Start
org 03H
jmp IntX0
……
0
回復
@sdjufeng
是的,另外,已經預定義過的就不必再次定義.比如:$mod51 ;或者#include等,以編譯器不同而不同Counter data 35HFlagreg data 20H……MyBit0 bit 00HMyBit1 bit Flagreg.1 ;即01H位……MyConst equ 126…… org 0H jmp Start org 03H jmp IntX0……
您好:ORG之前的各種設制命令占ROM地址嗎?要是占的話(ORG從0000H開始)ORG之前的命令占哪里?(PC指針不是從零開始嗎)那些設制怎會操做.我糊涂請指教.學了十幾天了想寫程序還不行.
0
回復
@zbdxdxkj
各位老師好:我想了好久終于知到這個問題怎樣問了, 寄存器定意.I/O口.模數轉換命令是不是應該寫在ROM中是在ORG(主程序之前嗎?請指教謝了.
ORG是指定編譯出的程序放在ROM什么位置,可以用在任何地方,所以無所謂用在前后.
程序的第一句如果沒有ORG編譯時就放在地址0000,所以第一句可以不用“ORG 00”
定義I/O口、外設的指令也可以放在任何位置,但一定要在使用這些I/O口、外設的程序以前.這個以前不是編程序的行數前,而是程序運行先后的前面.但一般放在在主程序一開始,需要的話在程序運行中間也可以改變設置.
匯編語言分“指令”和“偽指令”,指令在編譯后都產生目標程序,這些目標程序就被放在ROM中;偽指令不產生目標程序,只是告訴編譯程序去怎么運作,比如說ORG就是告訴編譯程序下面緊接的程序從ROM什么地址開始,(放在ROM中什么位置).所以目標程序反編譯后能看到所有原程序的指令,但原程序中的偽指令反編譯后就看不到.
程序的第一句如果沒有ORG編譯時就放在地址0000,所以第一句可以不用“ORG 00”
定義I/O口、外設的指令也可以放在任何位置,但一定要在使用這些I/O口、外設的程序以前.這個以前不是編程序的行數前,而是程序運行先后的前面.但一般放在在主程序一開始,需要的話在程序運行中間也可以改變設置.
匯編語言分“指令”和“偽指令”,指令在編譯后都產生目標程序,這些目標程序就被放在ROM中;偽指令不產生目標程序,只是告訴編譯程序去怎么運作,比如說ORG就是告訴編譯程序下面緊接的程序從ROM什么地址開始,(放在ROM中什么位置).所以目標程序反編譯后能看到所有原程序的指令,但原程序中的偽指令反編譯后就看不到.
0
回復
@njyd
ORG是指定編譯出的程序放在ROM什么位置,可以用在任何地方,所以無所謂用在前后. 程序的第一句如果沒有ORG編譯時就放在地址0000,所以第一句可以不用“ORG00” 定義I/O口、外設的指令也可以放在任何位置,但一定要在使用這些I/O口、外設的程序以前.這個以前不是編程序的行數前,而是程序運行先后的前面.但一般放在在主程序一開始,需要的話在程序運行中間也可以改變設置. 匯編語言分“指令”和“偽指令”,指令在編譯后都產生目標程序,這些目標程序就被放在ROM中;偽指令不產生目標程序,只是告訴編譯程序去怎么運作,比如說ORG就是告訴編譯程序下面緊接的程序從ROM什么地址開始,(放在ROM中什么位置).所以目標程序反編譯后能看到所有原程序的指令,但原程序中的偽指令反編譯后就看不到.
講的太好了,我明白了很多.謝謝您!我在中斷方面還有點問題.中斷我知道,可單片機的一個腳我設成輸入時(比如說下降沿響應中斷)ROM中的程序怎樣響應(比如說我想要指定的一輸出腳由1變0)響應的是PC指的地址呢還是命令的位呢.我想這方面搞明白了就可是編程了.
0
回復
@zbdxdxkj
講的太好了,我明白了很多.謝謝您!我在中斷方面還有點問題.中斷我知道,可單片機的一個腳我設成輸入時(比如說下降沿響應中斷)ROM中的程序怎樣響應(比如說我想要指定的一輸出腳由1變0)響應的是PC指的地址呢還是命令的位呢.我想這方面搞明白了就可是編程了.
樓主,
我有個同事,1953年出生的.他是2001年后,才學單片機.湖北人
近幾年,他已經很熟悉,MCU開發,例如電飯煲,倒車雷達,溫度控制板,棉花濕度儀.....
非常在行,他原來是,技校畢業
我本身,也是32歲才,真正編程.許多人說,30歲后,不宜從事軟件編程.
我覺得,不妥.俺,現在連復雜的,小波變換及其應用,DSP常用算法,也得心就手.我已36歲,這幾年,才轉行到DSP,MCU 編程.
以前,我是畫電路板的,PROTEL99,僅僅是硬件工程師
不過,現在算是DSP,MCU 行家
一起努力
我有個同事,1953年出生的.他是2001年后,才學單片機.湖北人
近幾年,他已經很熟悉,MCU開發,例如電飯煲,倒車雷達,溫度控制板,棉花濕度儀.....
非常在行,他原來是,技校畢業
我本身,也是32歲才,真正編程.許多人說,30歲后,不宜從事軟件編程.
我覺得,不妥.俺,現在連復雜的,小波變換及其應用,DSP常用算法,也得心就手.我已36歲,這幾年,才轉行到DSP,MCU 編程.
以前,我是畫電路板的,PROTEL99,僅僅是硬件工程師
不過,現在算是DSP,MCU 行家
一起努力
0
回復
@zbdxdxkj
講的太好了,我明白了很多.謝謝您!我在中斷方面還有點問題.中斷我知道,可單片機的一個腳我設成輸入時(比如說下降沿響應中斷)ROM中的程序怎樣響應(比如說我想要指定的一輸出腳由1變0)響應的是PC指的地址呢還是命令的位呢.我想這方面搞明白了就可是編程了.
中斷是單片機在執行某個進程時,由于內、外某個中斷源向單片機發出中斷請求信號,要求單片機中斷當前進程而轉去執行相應的線程,待處理完畢中斷線程后,再返回繼續執行原來進程.
當設置外部中斷的信號來時(在中斷引腳發生了下降沿),先由硬件完成中斷標志位的變化.在由硬件完成PC指針的入棧,記錄被中斷進程的的地址.
在由硬件完成PC指針裝入中斷線程的入口地址.
PC指針裝入中斷線程入口地址后,單片機開始執行中斷線程(指定一個輸出腳由1變0).由于中斷線程中可能用到被中斷進程的資源,所以要先保護原進程的資源狀態如 ACC,PSW 等等,當中斷線程執行完成后在恢復原進程的資源狀態.我的理解就是這樣的說的不好也別怪我啦!相互學習啦!
52歲還在學習!這就夠我學的啦!向你學習!
當設置外部中斷的信號來時(在中斷引腳發生了下降沿),先由硬件完成中斷標志位的變化.在由硬件完成PC指針的入棧,記錄被中斷進程的的地址.
在由硬件完成PC指針裝入中斷線程的入口地址.
PC指針裝入中斷線程入口地址后,單片機開始執行中斷線程(指定一個輸出腳由1變0).由于中斷線程中可能用到被中斷進程的資源,所以要先保護原進程的資源狀態如 ACC,PSW 等等,當中斷線程執行完成后在恢復原進程的資源狀態.我的理解就是這樣的說的不好也別怪我啦!相互學習啦!
52歲還在學習!這就夠我學的啦!向你學習!
0
回復
@我愛電源網
中斷是單片機在執行某個進程時,由于內、外某個中斷源向單片機發出中斷請求信號,要求單片機中斷當前進程而轉去執行相應的線程,待處理完畢中斷線程后,再返回繼續執行原來進程.當設置外部中斷的信號來時(在中斷引腳發生了下降沿),先由硬件完成中斷標志位的變化.在由硬件完成PC指針的入棧,記錄被中斷進程的的地址.在由硬件完成PC指針裝入中斷線程的入口地址.PC指針裝入中斷線程入口地址后,單片機開始執行中斷線程(指定一個輸出腳由1變0).由于中斷線程中可能用到被中斷進程的資源,所以要先保護原進程的資源狀態如ACC,PSW等等,當中斷線程執行完成后在恢復原進程的資源狀態.我的理解就是這樣的說的不好也別怪我啦!相互學習啦!52歲還在學習!這就夠我學的啦!向你學習!
你說的太復雜了.簡單點就是:
中斷響應時,程序會自動跳到ROM開頭的幾個中斷地址之一,(具體要看什么中斷,書上能查到),這幾個地址應該寫上轉移指令(指向你寫的中斷處理程序),程序到這幾運行后就會轉移到你寫的你寫的中斷處理程序運行.
中斷時單片機會自動記下在什么地址響應中斷的,中斷處理程序最后一句“RETI”(沒記錯吧?)就是告訴單片機返回到響應中斷時記下的地方.
中斷處理程序一般要保護現場,就是保存下響應中斷時正在使用并且后面還要使用的一些寄存器內容,這個問題只要把堆棧搞懂就是小菜一碟.
試驗中斷可以把斷點設在中斷處理程序內,運行中在此停下就說明發生了中斷.
或者在中斷處理程序內進行寫RAM的操作,運行后這個RAM地址被寫入就說明發生了中斷.
初學者對中斷是個難點,可以先編些簡單的程序試驗,只要能產生你需要的中斷后面的就好辦了.
自學單片機關鍵就在多試,有些不懂的地方編些小程序多試試就能搞通.當然試硬件中斷需要有相應的硬件,限可以先試定時器中斷,這用軟件仿真就可以.
中斷響應時,程序會自動跳到ROM開頭的幾個中斷地址之一,(具體要看什么中斷,書上能查到),這幾個地址應該寫上轉移指令(指向你寫的中斷處理程序),程序到這幾運行后就會轉移到你寫的你寫的中斷處理程序運行.
中斷時單片機會自動記下在什么地址響應中斷的,中斷處理程序最后一句“RETI”(沒記錯吧?)就是告訴單片機返回到響應中斷時記下的地方.
中斷處理程序一般要保護現場,就是保存下響應中斷時正在使用并且后面還要使用的一些寄存器內容,這個問題只要把堆棧搞懂就是小菜一碟.
試驗中斷可以把斷點設在中斷處理程序內,運行中在此停下就說明發生了中斷.
或者在中斷處理程序內進行寫RAM的操作,運行后這個RAM地址被寫入就說明發生了中斷.
初學者對中斷是個難點,可以先編些簡單的程序試驗,只要能產生你需要的中斷后面的就好辦了.
自學單片機關鍵就在多試,有些不懂的地方編些小程序多試試就能搞通.當然試硬件中斷需要有相應的硬件,限可以先試定時器中斷,這用軟件仿真就可以.
0
回復
@zyqag
樓主, 我有個同事,1953年出生的.他是2001年后,才學單片機.湖北人近幾年,他已經很熟悉,MCU開發,例如電飯煲,倒車雷達,溫度控制板,棉花濕度儀..... 非常在行,他原來是,技校畢業 我本身,也是32歲才,真正編程.許多人說,30歲后,不宜從事軟件編程.我覺得,不妥.俺,現在連復雜的,小波變換及其應用,DSP常用算法,也得心就手.我已36歲,這幾年,才轉行到DSP,MCU編程. 以前,我是畫電路板的,PROTEL99,僅僅是硬件工程師 不過,現在算是DSP,MCU行家 一起努力
您講的太好了,我要非常奴力才行,謝謝鼓力.我正準備學PRTEL99呢,拜你為老師不要推詞奧.我買不到有關資料.
0
回復
@njyd
你說的太復雜了.簡單點就是: 中斷響應時,程序會自動跳到ROM開頭的幾個中斷地址之一,(具體要看什么中斷,書上能查到),這幾個地址應該寫上轉移指令(指向你寫的中斷處理程序),程序到這幾運行后就會轉移到你寫的你寫的中斷處理程序運行. 中斷時單片機會自動記下在什么地址響應中斷的,中斷處理程序最后一句“RETI”(沒記錯吧?)就是告訴單片機返回到響應中斷時記下的地方. 中斷處理程序一般要保護現場,就是保存下響應中斷時正在使用并且后面還要使用的一些寄存器內容,這個問題只要把堆棧搞懂就是小菜一碟. 試驗中斷可以把斷點設在中斷處理程序內,運行中在此停下就說明發生了中斷. 或者在中斷處理程序內進行寫RAM的操作,運行后這個RAM地址被寫入就說明發生了中斷. 初學者對中斷是個難點,可以先編些簡單的程序試驗,只要能產生你需要的中斷后面的就好辦了. 自學單片機關鍵就在多試,有些不懂的地方編些小程序多試試就能搞通.當然試硬件中斷需要有相應的硬件,限可以先試定時器中斷,這用軟件仿真就可以.
謝謝您:怎么說呢你講的很現實,我明白一點就是不管過程如何,目地達到就行.過程以后再說,也可能不說就明白了.哈哈高興那么多熱心人.
0
回復