1樓:匿名使用者
開發當bai然是用c,又快又易懂好維
du護,但是想要優zhi化程式dao還是要懂彙編的,要不然實回現同樣乙個功能答的程式,好的程式設計師可以把程式設計得又短又快,而不做優化的可能會又臭又長,2k以下可以搞定的,你非要搞到4k以上去那最終產品的成本每個至少會相差幾毛到一兩塊錢,而且成本公升高時質量卻是下降的,這樣當然就不好了,所以我個人認為做微控制器程式設計,應當是彙編和c都會才是最好的,次一點的是會c,且能大致看懂彙編,可以幫助優化c程式,
只會彙編,乙個程式開發下來,得花幾周到幾個月,開發成本太高了,不值得只會c完全不懂彙編,那也是很難做出高質量的微控制器程式的
2樓:匿名使用者
程式中有ret語句時表來明該程源序段是乙個子bai程式,且第一條語句必
du須有標zhi號(程式中沒有),可在主程式或dao其它子程式中的lcall (或acall)語句對其進行呼叫,返回時返回到呼叫語句的下一條指令。
若這是乙個完整的程式,不能用ret指令,一定要用等待(結束)指令sjmp $ 。
3樓:沙里波特
你寫的,是乙個子程式。
末尾的 ret,是返回到主程式去。
微控制器組合語言 200
4樓:匿名使用者
200人民幣還可以做!
5樓:九州天極之光
解決是能解決.但是這個分數不值得花兩三個小時.
6樓:匿名使用者
這麼高難度的題目只能私聊才能解決問題。
7樓:匿名使用者
;程式實現功能
;西南北路口直行與轉彎交替通行,數碼管顯示直行通行倒計時,紅綠黃燈顯示包括行人路在內的道路交通狀態。
;某一方向道路擁擠時,可以人工控制調節東西南北方向通行時間。
;緊急情況時,各路**通燈顯示紅燈,數碼管保持資料不變。
;工作暫存器及儲存單元分配
;1.工作暫存器
;r2設定為定時器定時中斷次數,r6、r7用於延時程式中的暫存器
;2.片內儲存單元
;30h、31h作為兩組數碼管顯示資料儲存單元;32h、33h作為交通燈初始狀態儲存單元
;40h、41h作為交通燈顯示資料儲存單元
;3.標誌位
;00h:南北通行標誌位 ; 01h:東西通行標誌位;02h:緊急事件標誌位
; *** *** ***
snf equ 00h ; 南北通行標誌位
ewf equ 01h ; 東西通行標誌位
urf equ 02h ; 緊急事件標誌位
org 0000h
ljmp main ; 上電轉主程式
org 000bh ; 定時中斷入口
ljmp dszd
org 0003h ; 緊急中斷入口
ljmp urzd
org 0030h
main: lcall init ; 呼叫初始化子程式
loop: lcall dis ; 迴圈執行顯示子程式
ajmp loop
; *** *** *** 初始化程式
init: setb snf
setb ewf
setb urf
mov r2,#20 ; 定時器中斷20次為1s
mov tmod,#01h ; 初始化定時器
mov tl0,#0b0h
mov th0,#3ch
setb ea ; 開定時中斷與緊急中斷
setb et0
setb tr0
setb ex0
setb it0 ; 設定中斷程式控制方式
mov dptr,#tab ; 數值首位址放入dptr中
mov 40h,#40 ; 東南西北通行時間設定
mov 41h,#40
mov 30h,#40 ; 通行時間初始化
mov 31h,#60
mov p0,#4ch ; 初始化時南北通行並把交通燈狀態分別放在32h和33h中
mov 32h,#4ch
mov p2,#15h
mov 33h,#15h
ret; *** *** *** 顯示子程式
dis: mov p3,#0dfh ; 選中南北方向的十位數碼管
mov a,30h ; 把顯示資料送人數碼管顯示
mov b,#10
div ab
movc a,@a+dptr
mov p1,a ;
lcall d1ms
mov p3,#0efh ; 選中南北方向的個位數碼管
mov a,b ; 送入數碼管顯示
movc a,@a+dptr
mov p1,a
lcall d1ms
mov p3,#7fh ; 選中第東西方向的十位數碼管
mov a,31h ; 送入數碼管顯示
mov b,#10
div ab
movc a,@a+dptr
mov p1,a
lcall d1ms
mov p3,#0bfh ; 選中第東西方向的個位數碼管
mov a,b
movc a,@a+dptr
mov p1,a
lcall d1ms
setb p3.0
setb p3.1
jnb p3.0,dis_s ; 查詢是否第乙個按鍵按下
jnb p3.1,dis_e ; 查詢是否第二個按鍵按下
ajmp dis_r ; 沒有鍵按下則返回
dis_s:lcall d5ms ; 按鍵去抖
jnb p3.0,dis_sn
ajmp dis_r
dis_sn:mov 40h,#50 ; 對通行時間從新分配,南北通行時間加長
mov 41h,#30
ajmp dis_r
dis_e:lcall d5ms ; 按鍵去抖
jnb p3.1,dis_ew
ajmp dis_r
dis_ew:mov 40h,#30 ; 東西通行時間加長
mov 41h,#50
dis_r:ret
; *** *** *** 定時中斷處理程式
ds_c: ljmp ds_r ; 接力跳轉
dszd: push acc ; 保護現場
push psw
clr tr0 ; 關定時器及中斷標誌位並重新賦值
clr tf0
mov tl0,#0b0h
mov th0,#3ch
djnz r2,ds_c ; 判斷1m時間是否到達
mov r2,#20 ; 到達重新賦值
dec 30h ; 南北方向通行時間減一
mov a,30h ; 把減一後的時間送入顯示儲存單元
; *** *** *** 南北通行到達最後4秒時黃燈閃爍
ds_10:cjne a,#4,ds_11 ; 如果通行時間剩餘4秒
jnb snf,ds_11 ; 判斷是否是南北通行
mov p0,#8ah
mov 32h, #8ah ; 把交通燈狀態存入儲存單元(後面類似)
ds_11:cjne a,#3,ds_12 ; 不是剩餘3秒,返回
jnb snf,ds_12 ; 不是南北通行時間,返回
mov p0,#88h
mov 32h, #88h
ds_12:cjne a,#2,ds_13
jnb snf,ds_13
mov p0,#8ah
mov 32h, #8ah
ds_13:cjne a,#1,ds_14
jnb snf,ds_14
mov p0,#88h
mov 32h, #88h
; *** *** ***
ds_14:jnz ds_ne ; 通行時間沒有結束轉向改變東西方向的數碼管
cpl snf ; 如果通行時間結束則對標誌位取反
jnb snf,ds_1 ; 判斷是否南北通行
mov 30h,40h ; 是,點亮相應的交通燈
mov p0,#4ch
mov 32h,#4ch ; 儲存交通燈狀態
mov p2,#15h
mov 33h, #15h ; 儲存交通燈狀態
ds_ne:dec 31h ; 東西方向通行時間減一
mov a,31h ; 把通行剩餘時間送入顯示儲存單元
; *** *** *** 東西方向通行時間剩餘4秒鐘黃燈閃爍(程式注釋與南北方向類似 略)
ds_20:cjne a,#4,ds_21
jb ewf,ds_21
mov p0,#51h
mov 32h, #51h
ds_21:cjne a,#3,ds_22
jb ewf,ds_22
mov p0,#41h
mov 32h, #41h
ds_22:cjne a,#2,ds_23
jb ewf,ds_23
mov p0,#51h
mov 32h, #51h
ds_23:cjne a,#1,ds_24
jb ewf,ds_24
mov p0,#41h
mov 32h, #41h
; *** *** ***
ds_24:jnz ds_r ; 東西方向時間沒有結束,返回
cpl ewf ; 對通行狀態取反
jnb ewf,ds_2 ; 東西方向通行時間到來,跳轉
mov 31h,#80 ; 東西方向通行結束,重新顯示時間
mov p0,#89h ; 點亮相應的交通燈
mov 32h, #89h
mov p2,#29h
mov 33h, #29h
ajmp ds_r
ds_1: mov 30h,#80 ; 南北通行時間結束,重新對顯示儲存單元賦值
mov p0,#89h ; 執行轉彎狀態1
mov 32h, #89h
mov p2,#26h
mov 33h, #26h
ajmp ds_ne
ds_2: mov 31h,41h ; 東西方向開始通行,賦值予顯示儲存單元
mov p0,#61h ; 點亮相應的交通燈
mov 32h, #61h
mov p2,#15h
mov 33h, #15h
ds_r: setb tr0
pop psw ; 恢復現場
pop acc
reti
; *** *** *** 緊急中斷處理程式
urzd: push acc ; 保護現場
push psw
clr ie0 ; 清除中斷標誌位
clr tr0 ; 關定時器
cpl urf ; 緊急事件標誌位
jb urf,ur_con ; 緊急結束;跳轉
mov p0,#49h ; 各路口燈全顯示紅燈亮
mov p2,#15h
ajmp ur_r
ur_con:setb tr0 ; 恢復正常交通
mov a,32h
mov p0,a
mov a,33h
mov p2,a
ur_r: pop psw ; 恢復現場
pop acc
reti
; *** *** *** 查表指令0,1,2,3,4,5,6,7,8,9
tab: db 3fh, 06h, 5bh, 4fh, 66h, 6dh
db 7dh, 07h, 7fh, 6fh
; *** *** *** 延時5ms與1ms
d5ms: mov r7,#5
d1ms: mov r7,#10
mov r6,#50
l1: djnz r6,$
djnz r7,l1
retend
微控制器c語言轉化為組合語言
下列程式已經除錯過,樓主試試看 key1 equ p2.4 按鍵.org 0000h jmp start org 001bh jmp t1 int start mov tmod,10h t1定時方式1 mov th1,65536 20000 256 20ms 12mhz mov tl1,65536 ...
movfmovwf在微控制器組合語言裡是什麼意思翱
pic的精簡指令,movf是把du乙個寄存zhi器dao記憶體送入w暫存器中,如 movf 8,0 就是把第8暫存器送到w中 相當於8051中累內加器a 後面是0說明存後容f不變 movwf 與上面相反,把w內容存入f暫存器中,相當於mov w to f 你好 不會 我的回答你還滿意嗎 在組合語言裡...
微控制器匯程式設計序問題請教高手
datmov mov dptr,data1 將外部資料首位址送dptrmov r0,data2 將內部資料首位址送r0datmov1 movx a,dptr 外部資料送累加器jz datmove 為0則退出 mov r0,a 不為0則送內部儲存器inc dptr 外部位址指標加1inc r0 內部位...