作者skywalker353 ()
看板NTUBIME-102
標題[營隊] 玉米田
時間Mon Jan 18 23:31:18 2010
大家好 我是今天講解8051程式的宗誠
組合語言與C++有許多不同處,可能很多人不能迅速的適應
但相信人能很快進入狀況的人也不在少數
而目前主要負責帶領大家的學長姊只有四位,且星期二、三有一、兩位學長會無法出席
教學人力相當吃緊,需要大家小組互助,甚至跨組幫忙也沒關係
只要組內有同學不太瞭解情況
例如:看不懂程式、不知道電路在幹麼
希望懂的人能先停下腳步,以教會組員為優先
因為這只是在學習,沒有任何競賽意味在裡面
較快完成的小組,可能只是獲得上天眷顧,沒有奇怪的錯誤發生
例如:我曾經用過一條電線,能將直流電壓轉換成三角波電壓,這根本是超自然現象!
因此衷心希望,大家能跨越組別互相教學、討論
不用急著趕進度~
有任何疑問可以迅速抓住學長,或是已經完成的同學
千萬別不好意思問人,也別吝嗇教人唷~( 當然希望問與教的人態度也都不要太差啦 )
最後幫大家複習一下
下面是50年後都還應該記住,並且告訴孫子們的常識~
MOV A, P1 ;將後面 P1的值丟給 A,即 A = P1
INC A ;將 A + 1
DEC A ;將 A - 1
CPL A ;把 A的內容反向,即 00111100 -> 11000011
CJNE 的用法: ;Compare Jump Not Equal
CJNE A, #20, Not_Equal
Equal:
...... ;A = 20的話會進來執行這幾行程式碼
JMP Continue ;記得要用JMP 離開,否則會繼續往下執行程式
Not_Equal:
...... ;A 不等於 20的話會從這裡開始執行程式
;這裡就不一定要加JMP,不加的話會直接進入Continue
Continue:
......
Delay的寫法:
今天花了很久時間講Delay,如果聽不懂的話
至少會看 DJNZ R1, & 這行指令被執行了幾次就好
此例子是執行了 20 * 100 次
Delay:
MOV R0, #20
DD1:
MOV R1, #100
DJNZ R1, $ ; $ 表示此行程式碼的位址
;可以改寫成 dd: DJNZ R1, dd
;意思是一樣的
DJNZ R0, DD1
RET ;使用函式記得要加 Return
如果嫌 20 * 100 不夠多,當然可以繼續擴充成 20 * 50 * 100
Delay:
MOV R0, #20
DD1:
MOV R1, #50
DD2:
MOV R2, #100
DJNZ R2, $
DJNZ R1, DD2
DJNZ R0, DD1
RET
另外有非常好用,也最常用的 JB、JNB、JZ、JNZ
JB P1.0 Label ;若 P1.0 接腳讀到 5 V 的電壓,將直接跳至 Label 執行程式
...... ;若 P1.0 接腳讀到 0 V,將往下執行此區域的程式
Label:
......
JNB 剛好相反,是讀到 0 V 的時候會跳,5 V 的時候不跳
JZ Label ;若 A = 0 的話會跳至 Label 執行程式
...... ;若 A不等於 0的話,將執行此區域的程式
Label:
......
JNZ 剛好相反,是不等於 0的時候會跳
是不是非常簡單呢!
抱歉有點晚 PO文,請大家告訴大家~
~( ̄▽ ̄)~(_△_)~( ̄▽ ̄)~(_△_)~( ̄▽ ̄)~
--
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.94.109
推 nerv3890:水歐 01/18 23:42
推 paul20:燈泡好有趣!! 01/18 23:45
推 bw80409:器材問題真的沒辦法~"~真的學到很多東西! 01/18 23:51
推 pipaho:大家加油!!有問題盡量多問沒關係~(我是教學的學姐) 01/19 00:19
推 nerv3890:天阿是學姊!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 01/19 00:25
推 lty518:方姊姊~ 01/19 00:36
※ 編輯: skywalker353 來自: 140.112.94.109 (01/19 00:43)