⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pwm.asm

📁 用c8051f040做得一个程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
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 + -