⑴ 單片機中的程序 每句翻譯對應的意思 我是菜鳥 高手幫忙翻譯下 萬分感謝!!!
LINE EQU 30H //相當於宏定義 LINE=30H
ROW EQU 31H //ROW=31H
VAL EQU 32H //VAL=32H
ORG 00H //程序入口地址
SJMP START //跳到START處
ORG 0BH //定義定時器0的中斷地址入口
LJMP INT_T0 //跳到定時器0的服務程序入口INT_T0處
START: MOV P0,#00H //START標號程序的入口處,P0=0;
MOV TMOD,#01H //TMOD=01H,定義定時器0的工作方式為1
LSCAN: MOV P3,#0F0H //LSCAN標號程序的入口處,P0=0F0H
L1: JNB P3.0,L2 //L1標號程序的入口處,如果P3=0,則跳到L2標號處
LCALL DELAY //調用DELAY函數
JNB P3.0,L2 //如果P3=0,則跳到L2標號處
MOV LINE,#00H //將LINE指向的地址清零,在這里即將地址30H處的內存清零
LJMP RSCAN //長無條件跳轉到RSCAN
L2: JNB P3.1,L3 //L2標號程序的入口處, 如果P3.1=0,則跳到L3標號處
LCALL DELAY //長調用函數DELAY
JNB P3.1,L3 //如果P3.1=0,則跳到L3標號處
MOV LINE,#01H //將LINE指向的地址的內存賦值為1,在這里即將地址30H處的內存賦值為1
LJMP RSCAN //長無條件跳轉到RSCAN
L3: JNB P3.2,L4 //L3程序標號入口處,如果P3.2=0,則跳到標號L4處
LCALL DELAY //長調用函數DELAY
JNB P3.2,L4 //如果P3.2=0,則跳到標號L4處
MOV LINE,#02H //將LINE指向的地址的內存賦值為2,在這里即將地址30H處的內存賦值為2
LJMP RSCAN //長無條件跳轉到RSCAN標號處
L4: JNB P3.3,L1 //L4標號程序入口處,如果P3.3=0,則跳到L1標號處
LCALL DELAY //長高用函數DELAY
JNB P3.3,L1 //如果P3.3=0,則跳到L1標號處
MOV LINE,#03H //將LINE指向的地址的內存賦值為3,在這里即將地址30H處的內存賦值為3
RSCAN: MOV P3,#0FH //RSCAN程序標號入口處,P3=0FH
C1: JNB P3.4,C2 //C1程序標號入口處,如果P3.4=0,則跳到C2標號處
MOV ROW,#00H //將ROW指向的地址的內存賦值為0,在這里即將地址31處的內存賦值為0
LJMP CALCU //長無條件跳到CALCU標號處
C2: JNB P3.5,C3 //C2程序標號入口處,如果P3.5=0,則跳到C3標號處
MOV ROW,#01H //將ROW指向的地址的內存賦值為1,在這里即將地址31處的內存賦值為1
LJMP CALCU //長無條件跳到CALCU處
C3: JNB P3.6,C4 //C3程序標號入口處,如果P3.6=0,則跳到C4標號處
MOV ROW,#02H //將ROW指向的地址的內存賦值為2,在這里即將地址31處的內存賦值為2
LJMP CALCU //長無條件跳到CALCU處
C4: JNB P3.7,C1//C4程序標號入口處,如果P3.7=0,則跳到C1標號處
MOV ROW,#03H //將ROW指向的地址的內存賦值為3,在這里即將地址31處的內存賦值為3
CALCU: MOV A,LINE//CALCU程序標號入口處,A=LINE,在此,即A=30H,A指向地址30H處
MOV B,#04H //B=04H
MUL AB //A中的內容與B中的內容相乘
ADD A,ROW //A=A的內容+ROW中的內容
MOV VAL,A //並A中的內容放到VAL所指向的地址內存處,在此VAL為32H
MOV DPTR,#TABLE2 //將TABLE2的地址存到DPTR里
MOV B,#2 //B=2
MUL AB //A中的內容與B中的內容相乘
MOV R1,A //將A中的內容存到R1里
MOVC A,@A+DPTR //將A+DPTR的內容存到A中,在此表示取表值
MOV TH0,A //將A中的內容給定時器0的高位賦初值
INC R1 //R1自身加1
MOV A,R1 //將R1 的值賦給A
MOVC A,@A+DPTR //將A+DPTR的內容存到A中,在此表示取表值
MOV TL0,A //將A中的內容給定時器0的低位賦初值
MOV IE,#82H //設置中斷允許寄存器,在此,表示開總中斷EA,開定時器允許中斷ET0
SETB TR0 //將T0置1,在此表示啟動定時器T0
MOV A,VAL //將VAL的地址賦值給A
MOV DPTR,#TABLE1 //將TABLE1的地址存到DPTR里
MOVC A,@A+DPTR//將A+DPTR的內容存到A中,在此表示取表值
MOV P0,A //P0=A
W0: MOV A,P3 //W0程序標號入口處,將P3賦值給A
CJNE A,#0FH,W1//如果A不等於0FH,則跳到W1標號處
MOV P0,#00H //將P0賦值為0
CLR TR0 //將TR0清零,在此表示關閉定時器T0
LJMP LSCAN //長無條件跳到LSCAN標號處
W1: MOV A,P3 //W1程序標號入口處,將P3賦值給A
CJNE A,#0F0H,W2//如果A不等於0FH,則跳到W2標號處
MOV P0,#00H //將P0賦值為0
CLR TR0 //將TR0清零,在此表示關閉定時器T0
W2: SJMP W0 //W2程序標號入口處,短無條件跳到W0標號處
INT_T0: MOV DPTR,#TABLE2 //定時器0中斷的服務程序入口處,將TABLE2的地址存到DPTR里
MOV A,VAL //將VAL存到A中,在此VAL =32H
MOV B,#2 //將B賦值為2
MUL AB //A中的內容與B中的內容相乘
MOV R1,A //將A中的內容存放到R1中
MOVC A,@A+DPTR //將A+DPTR的內容存到A中,在此表示取表值
MOV TH0,A //將A中的內容存到TH0中,作為定時器T0的高位初值
INC R1 //R1自身加1
MOV A,R1 //將R1中的內容存放到A中
MOVC A,@A+DPTR //將A+DPTR的內容存到A中,在此表示取表值
MOV TL0,A//將A中的內容存到TH0中,作為定時器T0的低位初值
CPL P1.0 //將P1.0取反
RETI //中斷子函數返回標號
DELAY: MOV R6,#10 //DELAY函數入口處,R6=10
D1: MOV R7,#250 //D1程序標號入口處,R7=250
DJNZ R7,$ //R7自減1,一直在此循環到為0
DJNZ R6,D1 //R6自減1,如果不為0,則跳到D1標號處
RET 子函數返回標號
TABLE1: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H //TABLE1地址處往下的地址中所放的數據
DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H
TABLE2: DW 64021,64103,64260,64400 //TABLE2地址處往下的地址中所放的數據
DW 64524,64580,64684,64777
DW 64820,64898,64968,65030
DW 65058,65110,65157,65178
希望這有用
⑵ 請問單片機程序中的這些符號是什麼意思
你說的是AVR單片機。
PORTA = 0x00;---定義PA口為0x00,及PA口上的所有管腳輸出為低電平,同樣道理,如果些微PORTA=0xFF,則都輸入高電平,0xFF及二進制的11111111,如果想讓某一位輸出高,其他為低,如00000001,則是PA0輸出為高電平,PA1——PA7輸出為低電平。(說明:每個口線與單片機實際引腳的對應關系請參看技術手冊。)
DDRA = 0xFF;----定義引腳的輸出輸入模式,1為輸出,0為輸入。當使用輸出模式及設置為1時,PORTA的值將影響內部上拉電阻的使用,如果PORTA對應管腳的值為1,則使用內部上拉電阻,否則不採用。 除了這里說的「=」之外,管腳的控制還有其他算符,|= ,&=! ,^=,==。
以下B,C,D埠同理。
⑶ freescale單片機中有個AD轉換序列長度的設置,請問一下這是指什麼啊
如果你是單通道轉換的話,隊列長度就是轉換多少次產生一次中斷。如果是多通道,則是轉換的通道數。
關於AD,一直有人問一些東西,應該是屬於AD比較深的東西,答應總結一個貼子.
大部分來自中電網陳剛版主的精典問答,如果要用加速度感測器,請看完下面的,如果想用好多路AD轉換請看完下面的.
一般小車可能不需要,因為一般用的是單次轉換單通道無FIFO模式.
1為什麼要多次轉換?
ATD模塊有8個結果寄存器,所以它的AD轉換有這樣的功能,就是對一個或多個通道連續進行轉換,將結果順序放入這8個結果寄存器中。這樣用戶如果要取一個通道的平均值,或取多個通道的值,都很方便了,就不用軟體一次一次地去轉換了
2 ATDCTL3 那個S8C、S4C、S2C、S1C決定的轉換序列長度是什麼意思?
ATDCTL3中的S8C~S1C決定了一個轉換序列的長度,即一個轉換序列共轉換多少次。你可以選擇做一次AD轉換的過程,是對一個通道連續轉換多次,還是對多個通道連續進行轉換,這由ATDCLT5的MULT位決定。
3 如果選擇了多通道,MULT=1,那麼CC、CB、CA、只是控制第一個轉換的通道那麼我就沒有找到該如何制定具體由哪幾個通道轉換的控制字。。。比如光要0、1、3三個通道轉換。。。難道本身轉換就是8個通道全部轉一遍的?
S8C~S1C就控制每輪進行多少次轉換,最多為8。比如可以選擇為6,那麼每6次轉換稱為一個序列。如果選擇了多通道轉換,那麼CC、CB和CA選擇首個轉換的通道,後面的通道按通道號排列。比如S8C~S1C選擇轉換數為6,MULT設為1,而CC、CB和CA選擇通道4,那麼轉換開始後,AD模塊將按通道4、通道5、通道6、通道7、通道0、通道1的順序依次進行轉換,並將轉換結果依次放入6個結果寄存器中。要注意並不能間隔選擇通道。
4 在HC12系列單片機中,當控制寄存器5中設置轉換序列長度為4,MULT=0(即單通道轉換)時,是在一個轉換序列中對一個通道連續轉換四次;而在S12系列中,當轉換序列長度設置為1,MULT=0時,每進行一個序列的轉換是對該通道轉換一次,還是轉換四次?
在S12系列中,當轉換序列長度設置為1(S8C:S1C=0001),MULT=0時,只對一個通道進行一次轉換。
5 關於控制寄存器ATD0CTL3中FIFO的使用
假定要轉換的序列為3,即通道3、4、5,轉換模式為連續轉換(SCAN=1)
(1)當FIFO=0時,轉換結果是存儲在ATD0DR0-ATD0DR2中,還是存儲在ATD0DR3-ATD0DR5中?
當一個序列轉換結束後,下一個轉換序列的結果還是存儲在這幾個對應寄存器中,對嗎?
(2)當FIFO=1時,轉換結果是存儲在ATD0DR0-ATD0DR2中,還是存儲在ATD0DR3-ATD0DR5中?
當一個序列轉換結束後,下一個轉換序列的結果是存儲在緊接其後的幾個對應寄存器中,循環存儲(即存儲到ATD0DR7後,返回ATD0DR0,在從ATD0DR0-ATD0DR7存儲),對嗎?
假定要轉換的序列為3,即通道3、4、5,轉換模式為連續轉換(SCAN=1)
(1)當FIFO=0時,轉換結果是存儲在ATD0DR0-ATD0DR2中;當一個序列轉換結束後,下一個轉換序列的結果還是存儲在這幾個對應寄存器中。
(2)當FIFO=1時,第一次轉換結果存儲在ATD0DR0-ATD0DR2中;當一個序列轉換結束後,下一個轉換序列的結果是存儲在緊接其後的幾個對應寄存器中,循環存儲(即存儲到ATD0DR7後,返回ATD0DR0,再從ATD0DR0-ATD0DR7存儲)。總之:FIFO=1時,第一個轉換的結果保存在結果寄存器0中,而第一個轉換的通道由CC CB CA決定,之後就按結果寄存器順序遞增存放,一直存放到結果寄存器7,然後再從0開始。而當前是哪個通道完成了轉換,可由CCFx標志來查詢;結果存入哪個寄存器,可由CC2 CC1 CC0來查詢。
6 通道轉換是不是通過設置這二個寄存器,ATDCTRL3中轉換序列的長度來採集設置需要的通道數.還有ATDCTRL5中的MULT來設置啟動多通道轉換?
是的,ATDCTRL5設置成多通道轉換後,ATDCTRL3設置採集的通道數,此外ATDCTRL5中還需要設置多通道採集的起始通道。比如採集7個通道,起始通道是1,那麼就採集從1-7通道,如果起始通道是2,就採集2-7,還有0通道。
7 多通道轉換應該是同時進行的吧?各個通道的轉換結果分別放在哪個數據寄存器(這一點我非常困惑)?
多通道轉換也不是同時的,可以看AD的系統框圖,只有一個采樣保持電路,前面通過8通道選擇器來選擇通道,所以不能同時,只是多通道一次採集過程可以連續連續採集多個通道。每個通道的結果都保存在各自的結果寄存器reslut registers中
8 MC9SDg128上面有16個AD通道,而寄存器上好像只能啟動8個通道吧?另外8個通道該如何使用?
DG128是兩個8通道的AD,看dg128的數據手冊總的memory map,AD0的寄存器在基址的$0080-$009F 32個位元組的地方, AD1的寄存器在基址的$0120-$013F 32個位元組的地方。