ClRC編程
① 求單片機編程找最大數
程序如下:
MOV
R0,
#21H
;起始地址.
MOV
MAX,#00H
;先用0當做最大值.
MOV
R2,
#20H
;數據長度.
LOOP:
MOV
A,
@R0
;取來一個數據.
CLR
C
SUBB
A,
MAX
;減「最大值」.
JNC
rel1
;不夠減就算了.
MOV
A,
@R0
;夠減,就把這個數據.
MOV
MAX,A
;當做最大值.
rel1:
INC
R0
;轉向下一個.
DJNZ
R2,
LOOP
;循環.
SJMP
$
;結束.
END
② dsp的2407晶元c編程怎樣調用匯編語句
//(2) 主程序
// 該程序用於實驗演示模板上的8個LED的循環顯示
#include "register.h"
int temp,i;
main() // 初始化子程序
{
asm(" setc SXM"); // 抑制符號位擴展
asm(" clrc OVM"); // 累加器中結果正常溢出
asm(" clrc CNF"); // B0被配置為數據存儲空間
asm(" setc INTM"); // 禁止所有中斷
SCSR1=0x81FE; // CLKIN=10M,CLKOUT=4*CLKIN=40M
WDCR=0x0E8; // 不使能看門狗,因為SCSR2中的WDOVERRIDE
// 即WD?の桓次緩蟮娜筆≈滴?,故可以用
// 軟體禁止看門狗
IMR=0x0000; // 禁止所有中斷
IFR=0x0FFFF; // 清除全部中斷標志,"寫1清0"
MCRA=MCRA&0x00EF; // IOPA4,IOPA6,IOPB埠配置為一般的I/O功能, TMS320LF240x的
// 埠均為8位,MCRA為16位因此控制了IOPA,
// 和IOPB的設置
while(1)
{
PBDATDIR=0x0FFe0; // IOPB埠設置為輸出方式
PFDATDIR=0x0404;
PFDATDIR=0x0FFF0; // IOPF2 設置為輸出方式,且IOPF2=1
}
}
// 直接返回中斷服務程序
void interrupt nothing( )
{
return;
}
//這是一個可用的程序,供你參考
③ 單片機程序中為什麼要禁止看門狗
你要先明白看門狗的用途
看門狗其實就是一個定時器
這個定時器溢出是會產生一個中斷響應
中斷服務就是跳會程序開頭,即復位
看門狗常用在程序很容易跑飛的情況下(如等待超時,意外進入死循環等)
啟動看門狗後要定時在程序中把看門狗的計數值清0,就是防止它進入中斷然後復,這種常稱為喂狗
如果在一般簡單的程序中是不太可能會跑飛的話多數會關閉看門狗,因為引入了看門狗就多了定時計數值處理的一些代碼,增加了程序的復雜性
但是看樣子樓主的原因並非以上幾個方面, 關閉看門狗的目的是讓他先暫停再設置,而之後打開,就是那個kickdog()
在程序中的應用,會表現在為計數器的值賦0,可能你沒有留意
再者,正如樓上所說,你用的不純粹是單片機,而是DSP
DSP具體和單片機有什麼區別, 你可以暫時理解為專門為乘法和存儲優化使其速度加快以適用於通信領域的單片機
④ 請高手指點:單片機編程:採用邏輯運算指令用軟體方法實現:
MOV
A,30H
;30H
X7,X6,X5,X4,X3,X2,X1,X0
RL
A
;A
X6,X5,X4,X3,X2,X1,X0,X7
SETB
ACC.0
;A
X6,X5,X4,X3,X2,X1,X0,1
ANL
A,30H
;A
X6&X7,X5&X6,X4&X5,X3&X4,X2&X3,X1&X2,X0&X1,X0
JZ
Y0
;因為Y為A的各位的或,所以只有A中的各位全為0時(即A=0)Y才為0,否則Y為1
SETB
C
SJMP
DONE
Y0:
CLR
C
DONE:SJMP
$
⑤ 單片機編程,請問下面各個語句的意思,和程序功能
第一個是把內部從20H開始的連續5個數和從30H開始的連續5個數,兩兩對應相加,結果送到外部2000H開始的連續5個地址中。
從開始到CLR
C
都是初始化,然後是把20h中的數和30h中的數相加,送到2000h中,循環5次。
第二個就是求2的立方,結果送到50h中去。初始化--幅值給A--
查立方表--送存到50h中。
⑥ 編寫一個時鍾程序,使用單片機定時器1產生100ms的定時中斷,對定時器中斷計數,將時分秒顯示在數碼管上,
用現成的外部元件吧
DS1302
專用的時鍾模塊
操作簡單,佔用資源少,走時精確
⑦ 這是什麼錯誤symbol referencing errors - ./debug/light.out not built
看一下你的"register.h"文件中寄存器的定義方式,函數中用的時候要和定義的一致
⑧ 單片機數碼管編程 匯編語言,急
U16INC MACRO U16,;;16位無符號型變數加1
LOCALZZ
INC U16+1
MOV A,U16+1
JNZ ZZ
MOV U16+1,#0
INC U16
ZZ:
ENDM
U16MOV MACRO U16,VAL;;16位無符號型變數賦值
MOV U16+1,#LOW(VAL)
MOV U16,#HIGH(VAL)
ENDM
U16DAYV MACRO U16,VAL,;;16位無符號型變數判斷大小,最後根據Cy判斷
MOV A,U16+1
CLR C
SUBB A,#LOW(VAL)
MOV A,U16
SUBB A,#HIGH(VAL)
ENDM
WX1 EQU P2.0
WX2 EQU P2.1
WX3 EQU P2.2
WX4 EQU P2.3
S4 EQU P1.3
S5 EQU P1.4
LED1 EQU P1.6;;兩個LED
LED2 EQU P1.7
JDQ EQU P1.5;;繼電器
SMGBZ1 EQU 0X30
DS1 EQU 0X31
ZT EQU DS1+4
JSBZ1 EQU ZT+1;0-39的計數
JSBZ2 EQU ZT+2;計時標志,用於閃爍和計時
JSBZ3 EQU JSBZ2+2;;繼電器通斷兩次的計時和計數
ORG 0
JMP MAIN
ORG 0XB
JMP TimeInterupt
MAIN:
MOV SP,#0X70
MOV R0,#0x70
CLR A
MA1: MOV @R0,A ;數據全清0
DJNZ R0,MA1
CALL JDQLC_STOP
CALL Time0Init
;主循環
LOOP: CALL AJPD
CALL RUN
JMP lOOP
;主運行函數
RUN: MOV A,ZT
CJNE A,#1,RR1
JMP RUN1
RR1: CJNE A,#2,RR2
JMP RUN2
RR2: RET
;;0-39循環
RUN1:
MOV DS1+0,#0X10
MOV DS1+1,#0X10
MOV A,JSBZ1
MOV B,#10
DIV AB
MOV DS1+2,A
MOV DS1+3,B
U16DAYV JSBZ2,1000
JC RUN1_1
U16MOV JSBZ2,0
INC JSBZ1
MOV A,JSBZ1
CJNE A,#39+1,RUN1_1
MOVJSBZ1,#0
RUN1_1:
RET
;;FFFF閃爍
RUN2: U16DAYV JSBZ2,500
JC RUN2_1
MOV DS1+0,#0X10
MOV DS1+1,#0X10
MOV DS1+2,#0X10
MOV DS1+3,#0X10
SETB LED1
SETB LED2
U16DAYV JSBZ2,1000
JC RUN2_2
U16MOV JSBZ2,0
JMP RUN2_2
RUN2_1:
MOV DS1+0,#0X0F
MOV DS1+1,#0X0F
MOV DS1+2,#0X0F
MOV DS1+3,#0X0F
CLR LED1
CLR LED2
RUN2_2:
CALL JDQLC
RET
;按鍵判斷
AJPD:
JNB S4,AJ1
JNB S5,AJ2
RET
AJ1: JNB S4,$
MOV ZT,#2
CALL JDQLC_START
RET
AJ2: CALL JDQLC_STOP
SETB LED1
SETB LED2
JNB S5,$
MOV ZT,#1
MOV JSBZ1,#0
U16MOV JSBZ2,0
RET
JDQLC_START:
U16MOV JSBZ3,0
RET
JDQLC_STOP:
U16MOV JSBZ3,30000
SETB JDQ
RET
;繼電器通斷兩次
JDQLC:
U16DAYV JSBZ3,1000
JNC JDQ_1
CLR JDQ;通1s
RET
JDQ_1: U16DAYV JSBZ3,1500
JNC JDQ_2
SETB JDQ;斷0.5s
RET
JDQ_2: U16DAYV JSBZ3,1500+1000
JNC JDQ_3
CLR JDQ;通1s
RET
JDQ_3: U16DAYV JSBZ3,3000
JNC JDQ_4
SETB JDQ;斷
JDQ_4: RET
;;定時器初始化
Time0Init:
MOV TMOD,#0X01
MOV TH0,#HIGH(65536-1000)
MOV TL0,#LOW(65536-1000)
SETB TR0
SETB ET0
SETB EA
RET
;;數碼顯示
SMXS:
INC SMGBZ1
MOV A,SMGBZ1
SUBB A,#4
JC SMXS1
MOV SMGBZ1,#0
SMXS1:
MOV P2,#0XF0
MOV A,SMGBZ1
ADD A,#DS1
MOV R0,A
MOV A,@R0
MOV DPTR,#TABD
MOVC A,@A+DPTR
MOV P0,A
MOV DPTR,#TABW
MOV A,SMGBZ1
MOVC A,@A+DPTR
MOV P2,A
RET
TABD:;段碼
DB0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90
DB0X88,0X83,0XC6,0XA1,0X86,0X8E,0XFF,0XBF
TABW:;位碼
DB0xF1,0xF2,0xF4,0xF8
;;定時器0中斷
TimeInterupt:
PUSH PSW
PUSH ACC
MOV TH0,#HIGH(65536-1000)
MOV TL0,#LOW(65536-1000)
CALL SMXS
U16INC JSBZ2
U16DAYV JSBZ3,30000
JNC TimeOut
U16INC JSBZ3
TimeOut:
POP ACC
POP PSW
RETI
END
⑨ 單片機實驗中,怎麼用匯編比較大小
單片機實驗中,用匯編語言編程比較兩個數大小,主要用SUBB減法指令,也可以使用CJNE指令。示常式序如下:
;啟動入口
ORG
0000H
;復位啟動
LJMP
START
;
ORG
0100H
;
;
;主控程序
START:
MOV
R0,#30H
MOV
X,#0
MOV
Y,#0
LOOP:
MOV
A,@R0
CLR
C
SUBB
A,#111
JNC
NEXT
CPL
C
MOV
A,@R0
SUBB
A,Y
JC
NUM
MOV
Y,@R0
NUM:
MOV
A,@R0
SUBB
A,#60
JC
INCR0
INC
X
INCR0:
INC
R0
JMP
LOOP
NEXT:
JMP
$
;
X
EQU
20H
;
Y
EQU
21H
;
END
;
⑩ 編寫程序找出其中的最大值和最小值,以及它們各自的地址
參考一下:
;40H單元放最大值,41H單元放最小值
;42H單元放最大值地址,43H單元放最小值地址
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN:
MOV SP,#60H
MOV R0,#30H
MOV R7,#10H-2
M1: ;先把30H、31H兩個單元的數拿出來比較:大的放到40H,地址放到42H;小的放到41H地址放到43H
MOV 40H,@R0
MOV 42H,R0
INC R0
MOV A,R0
MOV 41H,@R0
MOV 43H,R0
CLR C
SUBB A,40H
JC START
MOV 41H,40H
MOV 43H,42H
MOV 40H,@R0
MOV 42H,R0
START:;從32H單元拿數,分別與40H單元的數和41H單元的數進行比較:比(40H)大,放到40H,比(41H)小,放到41H
INC R0
MOV A,@R0
CLR C
SUBB A,40H
JC SWAP2
MOV 40H,@R0
MOV 42H,R0
SJMP NEXT
SWAP2:
MOV A,@R0
CLR C
SUBB A,41H
JNC NEXT
MOV 41H,@R0
MOV 43H,R0
NEXT:
DJNZ R7,START
SJMP $
END