?? wave_generater.asm
字號(hào):
$include (c8051f330.inc) ; Include register definition file.;-----------------------------------------------------------------------------; EQUATES;-----------------------------------------------------------------------------
GREEN_LED equ P1.3 ; Green LED: '1' is ON
PB0 BIT P0.7
FLAG0_180 BIT 00H TEMP EQU 50H
INDEX EQU 51H
T_BUF EQU 60H
MTD EQU 30H
MRD EQU 40H
DISP_BUF EQU 56H
SDA BIT P1.4
SCL BIT P1.5
ACK1 BIT 20H
SLA EQU 1AH
SUBA EQU 1BH
NUMBYTE EQU 1CH
BLINK EQU 1DH
NUM EQU 1EH
MTD1 EQU 0E0H
ZLG7290 EQU 70H;-----------------------------------------------------------------------------; RESET and INTERRUPT VECTORS;----------------------------------------------------------------------------- ; Reset Vector ;cseg AT 0 ;ljmp Main ; Locate a jump to the start of
ORG 0000H
LJMP MAIN ; code at the reset vector. ORG 000BH
LJMP TIMER0
ORG 0023H
LJMP SVC_SCI ;轉(zhuǎn)串行口中斷服務(wù)程序;-----------------------------------------------------------------------------; CODE SEGMENT;-----------------------------------------------------------------------------;Blink segment CODE
;rseg Blink ; Switch to this code segment.
;using 0 ; Specify register bank for the
ORG 0100H ; following program code.Main: MOV OSCICN,#0B0H ;內(nèi)部振蕩器使能,系統(tǒng)時(shí)鐘8分頻(24.5MHz)
MOV A,OSCICL
ADD A,#2DH
MOV OSCICL,A ;內(nèi)部振蕩器調(diào)整為20MHz,時(shí)鐘周期0.4us
; Disable the WDT.
ANL PCA0MD, #NOT(040h) ; clear Watchdog Enable bit ; Enable the Port I/O Crossbar ORL P0SKIP, #06h ; skip LED pin in crossbar
; assignments
MOV XBR0,#0x01;#01H ;UART0使能
MOV XBR1,#0x40;#40H ; enable Crossbar
ORL P1MDOUT, #0x38;#08h ; make LED pin output push-pull
ORL P1MDIN, #0x38;#08h ; make LED pin input mode digital ;ANL P1MDOUT,#0FH ;P0.4、P0.5為開(kāi)漏輸出 ; Initialize LED to OFF CLR GREEN_LED
MOV TEMP,#00H
MOV IDA0CN,#0xf2 ;DAC輸出2mA電流#0F2H
MOV IDA0L,#00H MOV IDA0H,#00H
MOV TMOD,#22H; ;TMOD: Timer 0, mode 2, 8-bit reload */
MOV TCON,#10H; ;TCON: */
MOV TH0,#6; ;TH0: Reload value */
MOV TL0,#6; ;TL0: Reload value
SETB ET0; /* ET0: Enable timer 0 */
SETB TR0; /* TR0: Timer 0 run
SETB EA; ;開(kāi)放總中斷 /* EA: Enable interrupts
CLR FLAG0_180
MOV INDEX,#00H
NOP
NOP
NOP
NOP
NOP
NOP
NOP
SJMP LOOP
TIMER0: CLR TR0
MOV A,INDEX
JNB P0.4,TIM90
JNB P0.0,TIM180
TIM90: MOV DPTR,#SINTBL90
SJMP TIM0
TIM180: MOV DPTR,#SINTBL180
TIM0: MOVC A,@A+DPTR
MOV IDA0H,A
INC INDEX
MOV R2,INDEX
CJNE R2,#0C7H,TORETI
MOV INDEX,#00H
TORETI: SETB TR0
RETI
D20MS: MOV R6,#14H
D201: ACALL D1MS
DJNZ R6,D201
RET
D1MS: MOV R7,#0C7H ;1T
DD1: NOP ;1T
NOP ;1T
NOP ;1T
DJNZ R7,DD1 ;2T
RET
;2T
D250MS: MOV R5,#0CH
DD2: ACALL D20MS
DJNZ R5,DD2
RET
D500MS: MOV R5,#19H
DD3: ACALL D20MS
DJNZ R5,DD3
RET
D1S: MOV R5,#32H
DD4: ACALL D20MS
DJNZ R5,DD4
RET
DELAY: PUSH PSW
PUSH ACC
MOV PSW,#10H
MOV R6,#250
DE1: NOP
NOP
DJNZ R6,DE1
POP ACC
POP PSW
RET
SVC_SCI: PUSH ACC ;接收中斷服務(wù)程序
PUSH PSW
JBC RI0,SVC_SCI_RI
SJMP SVC_SCI_Z
SVC_SCI_RI: MOV A,SBUF0
MOV 70H,A
SVC_SCI_Z: POP PSW
POP ACC
RETI
TRANS: MOV R7,#08H ;將60H單元開(kāi)始的連續(xù)10個(gè)字節(jié)通過(guò)串口發(fā)給PC機(jī)
MOV R0,#60H
TRANSA: MOV A,@R0
MOV SBUF0,A
WAITA: JNB TI0,WAITA
CLR TI0
INC R0
DJNZ R7,TRANSA
RET
SINTBL90: DB 0,8,16,24,32,40,47,55,63,71
DB 79,86,94,101,108,116,123,130,137,143
DB 150,156,163,169,175,181,186,192,197,202
DB 207,211,216,220,224,228,231,234,238,240
DB 243,245,247,249,251,252,253,254,255,255
DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
SINTBL180: DB 0, 8, 16, 24, 32, 40, 47, 55, 63, 71
DB 79, 86, 94, 101, 108, 116, 123, 130, 137, 143
DB 150, 156, 163, 169, 175, 181, 186, 192, 197, 202
DB 207, 211, 216, 220, 224, 228, 231, 234, 238, 240
DB 243, 245, 247, 249, 251, 252, 253, 254, 255, 255
DB 255, 255, 255, 254, 253, 252, 251, 249, 247, 245
DB 243, 240, 238, 234, 231, 228, 224, 220, 216, 211
DB 207, 202, 197, 192, 186, 181, 175, 169, 163, 156
DB 150, 143, 137, 130, 123, 116, 108, 101, 94, 86
DB 79, 71, 63, 55, 47, 40, 32, 24, 16, 8
DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
;在LED上顯示數(shù)字0~8
;入口參數(shù):R6:復(fù)合命令的第一個(gè)字節(jié),R7:復(fù)合命令的第二個(gè)字節(jié)。R2:要顯示的LED數(shù)
DISPLAY:
MOV R6,#60H ;復(fù)合命令第一個(gè)字節(jié)的初值,是按位下載數(shù)據(jù)并譯碼的指令代碼
MOV R0,#56H ;復(fù)合命令的第二個(gè)字節(jié),是要顯示的數(shù)值,這里是0
MOV R2,#06H ;循環(huán)6次,即顯示6位
LOOP1: MOV MTD,R6 ;將復(fù)合命令的第一個(gè)字節(jié)送發(fā)送數(shù)據(jù)緩沖區(qū)
MOV A,@R0
MOV MTD+1,A ;將復(fù)合命令的第二個(gè)字節(jié)送發(fā)送數(shù)據(jù)緩沖區(qū)
MOV 5CH,R0
LCALL SENDCMD ;調(diào)用發(fā)送命令函數(shù)
INC R6 ;指向下一個(gè)數(shù)碼管
MOV R0,5CH
INC R0 ;數(shù)值加1
LCALL DELAY ;延遲
DJNZ R2,LOOP1 ;循環(huán)8次了嗎?
RET
SENDCMD: MOV SLA,#ZLG7290 ;指定器件地址
MOV SUBA,#07H ;指定子地址
MOV NUMBYTE,#02H ;發(fā)送2個(gè)字節(jié)的命令字節(jié)數(shù)據(jù)
LCALL IWRNBYTE ;調(diào)用寫(xiě)n字節(jié)數(shù)據(jù)程序
NOP
NOP
NOP
NOP
RET
;--------------------------------------------------------------------------------------------------------
; MCS-51單片機(jī)模擬I2C軟件包(V1.1)
; 文件名:VI2C_ASM.INC
; 功能說(shuō)明:本模擬I2C軟件包包含了I2C操作的底層子程序,使用前要定義
;好SCL和SDA。在標(biāo)準(zhǔn)8051模式(12 Clock)下,對(duì)主頻要求是不高于12MHz(即1個(gè)
;機(jī)器周期1us);若Fosc>12MHz則要增加相應(yīng)的NOP指令數(shù)。(總線時(shí)序符合I2C標(biāo)
;準(zhǔn)模式,100Kbit/S)
; 版本說(shuō)明:本版新增了兩個(gè)子程序,IWRNBYTEEXT,IRDNBYTEEXT兩個(gè)子程序,
;這兩個(gè)子程序用于主從通訊上及一此特殊器件的讀寫(xiě)操作較為方便.
; 更新時(shí)間:2002.06.04
;--------------------------------------------------------------------------------------------------------
;啟動(dòng)I2C總線子程序
START: SETB SDA
NOP
SETB SCL ;起始條件建立時(shí)間大于4.7us
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
CLR SDA
NOP ;起始條件鎖定時(shí)大于4us
NOP
NOP
NOP
NOP
NOP ;起始條件鎖定時(shí)大于4us
NOP
NOP
NOP
NOP
NOP ;起始條件鎖定時(shí)大于4us
NOP
NOP
NOP
NOP
NOP ;起始條件鎖定時(shí)大于4us
NOP
NOP
NOP
NOP
CLR SCL ;鉗住總線,準(zhǔn)備發(fā)數(shù)據(jù)
NOP
NOP
NOP
NOP
NOP
NOP
RET
;結(jié)束總線子程序
STOP: CLR SDA
NOP
NOP
NOP
NOP
SETB SCL ;發(fā)送結(jié)束條件的時(shí)鐘信號(hào)
NOP ;結(jié)束總線時(shí)間大于4us
NOP
NOP
NOP
NOP
NOP ;結(jié)束總線時(shí)間大于4us
NOP
NOP
NOP
NOP
NOP ;結(jié)束總線時(shí)間大于4us
NOP
NOP
NOP
NOP
NOP ;結(jié)束總線時(shí)間大于4us
NOP
NOP
NOP
NOP
SETB SDA ;結(jié)束總線
NOP ;保證一個(gè)終止信號(hào)和起始信號(hào)的空閑時(shí)間大于4.7us
NOP
NOP
NOP
NOP ;保證一個(gè)終止信號(hào)和起始信號(hào)的空閑時(shí)間大于4.7us
NOP
NOP
NOP
NOP ;保證一個(gè)終止信號(hào)和起始信號(hào)的空閑時(shí)間大于4.7us
NOP
NOP
NOP
NOP ;保證一個(gè)終止信號(hào)和起始信號(hào)的空閑時(shí)間大于4.7us
NOP
NOP
NOP
RET
;發(fā)送應(yīng)答信號(hào)子程序
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -