📄 pwm.asm
字号:
PT2 bit 0BDh ; /* TIMER 2 PRIORITY */
;PS bit 0BCh ; /* SERIAL PORT PRIORITY */
;PT1 bit 0BBh ; /* TIMER 1 PRIORITY */
;PX1 bit 0BAh ; /* EXTERNAL INTERRUPT 1 PRIORITY */
;PT0 bit 0B9h ; /* TIMER 0 PRIORITY */
;PX0 bit 0B8h ; /* EXTERNAL INTERRUPT 0 PRIORITY */
;/* CAN0STA 0xC0 */
BOFF bit 0C7h ; /* BUS OFF STATUS */
EWARN bit 0C6h ; /* WARNING STATUS */
EPASS bit 0C5h ; /* ERROR PASSIVE */
RXOK bit 0C4h ; /* RECEIVED MESSAGE SUCCESSFULLY */
TXOK bit 0C3h ; /* TRANSMIT A MESSAGE SUCCESSFULLY */
LEC2 bit 0C2h ; /* LAST ERROR CODE BIT 2 */
LEC1 bit 0C1h ; /* LAST ERROR CODE BIT 1 */
LEC0 bit 0C0h ; /* LAST ERROR CODE BIT 0 */
;/* SMB0CN 0xC0 */
BUSY bit 0C7h ; /* SMBUS 0 BUSY */
ENSMB bit 0C6h ; /* SMBUS 0 ENABLE */
STA bit 0C5h ; /* SMBUS 0 START FLAG */
STO bit 0C4h ; /* SMBUS 0 STOP FLAG */
SI bit 0C3h ; /* SMBUS 0 INTERRUPT PENDING FLAG */
AA bit 0C2h ; /* SMBUS 0 ASSERT/ACKNOWLEDGE FLAG */
SMBFTE bit 0C1h ; /* SMBUS 0 FREE TIMER ENABLE */
SMBTOE bit 0C0h ; /* SMBUS 0 TIMEOUT ENABLE */
;/* TMR2CN 0xC8 */
TF2 bit 0CFh ; /* TIMER 2 OVERFLOW FLAG */
EXF2 bit 0CEh ; /* TIMER 2 EXTERNAL FLAG */
EXEN2 bit 0CBh ; /* TIMER 2 EXTERNAL ENABLE FLAG */
TR2 bit 0CAh ; /* TIMER 2 ON/OFF CONTROL */
CT2 bit 0C9h ; /* TIMER 2 COUNTER SELECT */
CPRL2 bit 0C8h ; /* TIMER 2 CAPTURE SELECT */
;/* TMR3CN 0xC8 */
TF3 bit 0CFh ; /* TIMER 3 OVERFLOW FLAG */
EXF3 bit 0CEh ; /* TIMER 3 EXTERNAL FLAG */
EXEN3 bit 0CBh ; /* TIMER 3 EXTERNAL ENABLE FLAG */
TR3 bit 0CAh ; /* TIMER 3 ON/OFF CONTROL */
CT3 bit 0C9h ; /* TIMER 3 COUNTER SELECT */
CPRL3 bit 0C8h ; /* TIMER 3 CAPTURE SELECT */
;* TMR4CN 0xC8 */
TF4 bit 0CFh ; /* TIMER 4 OVERFLOW FLAG */
EXF4 bit 0CEh ; /* TIMER 4 EXTERNAL FLAG */
EXEN4 bit 0CBh ; /* TIMER 4 EXTERNAL ENABLE FLAG */
TR4 bit 0CAh ; /* TIMER 4 ON/OFF CONTROL */
CT4 bit 0C9h ; /* TIMER 4 COUNTER SELECT */
CPRL4 bit 0C8h ; /* TIMER 4 CAPTURE SELECT */
;/* PSW 0xD0 */
;CY bit 0xD7 ; /* CARRY FLAG */
;AC bit 0xD6 ; /* AUXILIARY CARRY FLAG */
;F0 bit 0xD5 ; /* USER FLAG 0 */
;RS1 bit 0xD4 ; /* REGISTER BANK SELECT 1 */
;RS0 bit 0xD3 ; /* REGISTER BANK SELECT 0 */
;OV bit 0xD2 ; /* OVERFLOW FLAG */
;F1 bit 0D1h ; /* USER FLAG 1 */
;P bit 0xD0 ; /* ACCUMULATOR PARITY FLAG */
;/* DMA0CN 0xD8 */
DMA0EN bit 0DFh ; /* DMA 0 ENABLE */
DMA0INT bit 0DEh ; /* DMA 0 OPERATIONS COMPLETE */
DMA0MD bit 0DDh ; /* DMA 0 MODE SELECT */
DMA0DE1 bit 0DCh ; /* ADC 0 DATA OVERFLOW ERROR */
DMA0DE0 bit 0DBh ; /* ADC 1 DATA OVERFLOW ERROR */
DMA0DOE bit 0DAh ; /* DMA 0 DATA OVERFLOW WARNINGENABLE */
DMA0DO1 bit 0D9h ; /* ADC 0 DATA OVERFLOW WARNING */
DMA0DO0 bit 0D8h ; /* ADC 1 DATA OVERFLOW WARNING */
;/* PCA0CN 0xD8 */
CF bit 0DFh ; /* PCA 0 COUNTER OVERFLOW FLAG */
CR bit 0DEh ; /* PCA 0 COUNTER RUN CONTROL BIT */
CCF5 bit 0DDh ; /* PCA 0 MODULE 5 INTERRUPT FLAG */
CCF4 bit 0DCh ; /* PCA 0 MODULE 4 INTERRUPT FLAG */
CCF3 bit 0DBh ; /* PCA 0 MODULE 3 INTERRUPT FLAG */
CCF2 bit 0DAh ; /* PCA 0 MODULE 2 INTERRUPT FLAG */
CCF1 bit 0D9h ; /* PCA 0 MODULE 1 INTERRUPT FLAG */
CCF0 bit 0D8h ; /* PCA 0 MODULE 0 INTERRUPT FLAG */
;/* ADC0CN 0xE8 */
AD0EN bit 0EFh ; /* ADC 0 ENABLE */
AD0TM bit 0EEh ; /* ADC 0 TRACK MODE */
AD0INT bit 0EDh ; /* ADC 0 EOC INTERRUPT FLAG */
AD0BUSY bit 0ECh ; /* ADC 0 BUSY FLAG */
AD0CM1 bit 0EBh ; /* ADC 0 CONVERT START MODE BIT 1 */
AD0CM0 bit 0EAh ; /* ADC 0 CONVERT START MODE BIT 0 */
AD0WINT bit 0E9h ; /* ADC 0 WINDOW INTERRUPT FLAG */
;/* ADC1CN 0xE8 */
AD1EN bit 0EFh ; /* ADC 1 ENABLE */
AD1TM bit 0EEh ; /* ADC 1 TRACK MODE */
AD1INT bit 0EDh ; /* ADC 1 EOC INTERRUPT FLAG */
AD1BUSY bit 0ECh ; /* ADC 1 BUSY FLAG */
AD1CM2 bit 0EBh ; /* ADC 1 CONVERT START MODE BIT 2 */
AD1CM1 bit 0EAh ; /* ADC 1 CONVERT START MODE BIT 1 */
AD1CM0 bit 0E9h ; /* ADC 1 CONVERT START MODE BIT 0 */
;/* ADC2CN 0xE8 */
AD2EN bit 0EFh ; /* ADC 2 ENABLE */
AD2TM bit 0EEh ; /* ADC 2 TRACK MODE */
AD2INT bit 0EDh ; /* ADC 2 EOC INTERRUPT FLAG */
AD2BUSY bit 0ECh ; /* ADC 2 BUSY FLAG */
AD2CM1 bit 0EBh ; /* ADC 2 CONVERT START MODE BIT 1 */
AD2CM0 bit 0EAh ; /* ADC 2 CONVERT START MODE BIT 0 */
AD2WINT bit 0E9h ; /* ADC 2 WINDOW INTERRUPT FLAG */
AD2LJST bit 0E8h ; /* ADC 2 LEFT JUSTIFY DATA BIT */
;/* DMA0CF 0xF8 */
DMA0HLT bit 0FFh ; /* DMA 0 HALT OFF-CHIP XRAM ENABLE */
DMA0XBY bit 0FEh ; /* DMA 0 XRAM BUSY */
DMA0CIE bit 0FBh ; /* DMA 0 COUNTER OVERFLOW ENABLE */
DMA0CI bit 0FAh ; /* DMA 0 COUNTER OVERFLOW */
DMA0EOE bit 0F9h ; /* DMA 0 END OF OPERATION ENABLE */
DMA0EO bit 0F8h ; /* DMA 0 END OF OPERATION */
;/* SPI0CN 0xF8 */
SPIF bit 0FFh ; /* SPI 0 INTERRUPT FLAG */
WCOL bit 0FEh ; /* SPI 0 WRITE COLLISION FLAG */
MODF bit 0FDh ; /* SPI 0 MODE FAULT FLAG */
RXOVRN bit 0FCh ; /* SPI 0 RX OVERRUN FLAG */
NSSMD1 bit 0FBh ; /* SPI 0 SLAVE SELECT MODE 1 */
NSSMD0 bit 0FAh ; /* SPI 0 SLAVE SELECT MODE 0 */
TXBMT bit 0F9h ; /* SPI 0 TX BUFFER EMPTY FLAG */
SPIEN bit 0F8h ; /* SPI 0 SPI ENABLE */
led bit p3.3
pwm_0 bit p3.0
pwm_1 bit p3.5
;txd bit p0.0
;rxd bit p0.1
ORG 0000H
LJMP MAIN ;复位
ORG 000BH
ljmp INT_FOR_T0 ;定时器 T0
;reti
;ORG 0023H
;ljmp rec_uart
ORG 00B0H
MAIN:
CLR EA
;关闭中断
MOV WDTCN, #0DEH
MOV WDTCN, #0ADH ;连续赋值0DEH,0ADH,关闭软件看门狗
MOV SFRPAGE,#0FH
mov sp,#07h
mov xbr0,#00000100b ;uart0连接到端口,tx0=p0.0,rx0=p0.1
mov xbr1,#00000000b
mov XBR2, #01000000b;40h
mov xbr3,#00h
mov P0MDOUT,#00000001h ;配置tx0=p0.0口为推挽式输出
mov p0,#00000010;rx0为数字输入
MOV OSCXCN,#67H ;定义并使能外部晶振,使之起振
LCALL delay ;调用1MS延时
OSC_READY:
MOV A,OSCXCN
JNB ACC.7,OSC_READY ;检查外部晶振振荡是否稳定
;稳定后继续
MOV CLKSEL,#01H ;将外部晶振接入系统时钟
MOV OSCICN,#00H ;关闭内部晶振 ,晶振准备完毕
MOV SFRPAGE,#00H
mov p3,#0ffh
mov tmod,#00100001b;定时器0方式1,16位定时器,定时器1工作在方式2下的自动重装的8位定时计数
mov TH0,#0ffh ;25khz方波周期为40us,在20us时发射一脉冲,得期初值为ffd7h
mov TL0,#0d7h
setb TR0
setb EA
setb ET0
setb ti0
setb ri0
;lcall uart
led2: cpl led
lcall delay
lcall delay
lcall delay
lcall fs ;调用发送程序
ajmp led2
;--------------
INT_FOR_T0:
clr et0
mov TH0,#0ffh
mov TL0,#0d7h
cpl pwm_0 ;25khz脉冲发射
cpl pwm_1
setb et0
reti
;rec_uart: ;串口中断入口地址
;w:jnb ri0,q ;w:jnb ri0,q ;接收标志不为1则调至检测发送标志是否为1
;lcall js ;调用接收
;q:jnb ti0,w ;q:jnb ti0,w
;lcall fs
; reti
;jnb ri0, tt
;tt: ;lcall js
;---------------------
delay: ;延时1MS延时
;push acc
;push b
mov a,#0
delay1:
mov b,#0
djnz b,$
djnz acc,delay1
;pop b
;pop acc
ret
;------------------
;发送子程序
fs:
setb ti0
setb p0.2
MOV ACC,#0FFH ;mov ACC,#0ffh
mov SBUF0,ACC
clr ti0
ret
;------------------
;接收子程序
js:clr p0.2
mov ACC,SBUF0
clr ri0
ret
;-----------------
;串口初始化
uart:mov scon0,#01010000b; uart0在方式1下的8位uart,可变波特率,uart0允许接收
mov SSTA0,#00010000b;禁止uart0的波特率2分频,发送和接收波特率时钟选择定时器1
mov saddr0,#00h;从地址对应为被乎略
mov saden0,#00h;从地址使能寄存器中对应为被视为“无关”
;mov tmod,#00100000b;定时器1工作在方式2下的自动重装的8位定时计数
mov th1,#0afh;
mov tl1,#0afh; 波特率为19200下的定时器1的溢出率的初值
setb tr1 ;开始计数
clr et1 ;禁止定时器1中断
;setb ea ;
;setb es0 ;允许uart0串口中断
ret
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -