找回密码
 立即注册
查看: 142|回复: 7

第一天打卡,就遇到问题,那位老师指导下

[复制链接]

该用户从未签到

14

主题

33

回帖

204

积分

中级会员

积分
204
发表于 2024-3-10 20:56:45 | 显示全部楼层 |阅读模式
本帖最后由 alanma 于 2024-3-10 21:02 编辑

代码如下,用定时器中断控制PWM(P2.0)间歇输出,但是不能关闭,不知道什么原因?那位老师指导下


;******************************************/

$include (/STC8H.INC)

;====================
STACK_POIRTER   EQU     0D0H    ;堆栈开始地址

;*************  本地变量声明    **************/
PWM1_Flag       BIT     20H.0
PWM1_Duty_H     DATA    30H
PWM1_Duty_L     DATA    31H
INT_TIME BIT 20H.1

;*******************************************************************
;*******************************************************************
        ORG     0000H               ;reset
        LJMP    F_Main

        ORG     000BH               ;1  Timer0 interrupt
        LJMP    F_Timer0_Interrupt

;******************** 主程序 **************************/
        ORG     0100H       ;reset
F_Main:
    ORL     P_SW2, #080H    ;扩展寄存器(XFR)访问使能

    MOV     P0M0,#07H                   ;设置P0.3为高阻输入,P0.0-0.2为推挽输出
    MOV     P0M1,#08H
    MOV     P1M0,#01H                  ;设置P1.0为推挽输出模式,P1.1,P1.3,P1.4,P1.6,P1.7为高阻输入
    MOV     P1M1,#0DAH
    MOV     P2M0,#07H                   ;设置P2.0~P2.2为推挽输出
    MOV     P2M1,#00H
    MOV     P3M0,#08H                  ;设置P3
    MOV     P3M1,#00H
    MOV     P4M0,#00H                  
    MOV     P4M1,#00H
        MOV     P5M0,#10H                  ;设置P5.4为推挽输出
    MOV     P5M1,#00H
    MOV     SP, #STACK_POIRTER
    MOV     PSW, #0
    USING   0       ;选择第0组R0~R7
   
    MOV     SP, #STACK_POIRTER
    MOV     PSW, #0
    USING   0       ;选择第0组R0~R7
                       
        CLR P3.6  ;测试用

;================= 用户初始化程序 ====================================
    CLR     PWM1_Flag

    MOV     PWM1_Duty_L, #0
    MOV     PWM1_Duty_H, #0

    CLR     TR0

        MOV TMOD,#00000001B       ;置T1为方式1,16位自动重载定时方式,置T0为方式1,16为不自动重载定时方式,           
       MOV TL1,#0C0H               ;T1定时20ms
        MOV TH1,#063H
        MOV TL0,#0E0H              ;定时10mS常数
      MOV TH0,#0B1H
        SETB ET0                                                                       
                SETB TR0
        SETB EA                   ;开中断
      
    LCALL   F_PWM_Init          ; PWM初始化

;=================== 主循环 ==================================
L_Main_Loop:

    LJMP    L_Main_Loop

;========================================================================
; 函数: F_PWM_Init
; 描述: PWM初始化程序.
; 参数: none
; 返回: none.
; 版本: V1.0, 2021-3-3
;========================================================================
F_PWM_Init:
    CLR     A                   ;写 CCMRx 前必须先清零 CCxE 关闭通道
    MOV     DPTR,#PWMA_CCER1
    MOVX    @DPTR,A

      
    MOV     A,#068H             ;设置 PWMx 模式1 输出
    MOV     DPTR,#PWMA_CCMR1
    MOVX    @DPTR,A

      
    MOV     A,#03H             ;配置通道输出使能和极性
    MOV     DPTR,#PWMA_CCER1
    MOVX    @DPTR,A

    MOV     A,#3                ;设置周期时间
    MOV     DPTR,#PWMA_ARRH
    MOVX    @DPTR,A
    MOV     A,#0FFH
    MOV     DPTR,#PWMA_ARRL
    MOVX    @DPTR,A

    MOV     A,#01H             ;使能 PWM1P 输出
    MOV     DPTR,#PWMA_ENO
    MOVX    @DPTR,A
   
    MOV     A,#01H              ;高级 PWM 通道输出脚选择位, P2.0为01H,P1.0为00H
    MOV     DPTR,#PWMA_PS
    MOVX    @DPTR,A
  
     MOV     A,#080H             ;使能主输出
    MOV     DPTR,#PWMA_BKR
    MOVX    @DPTR,A

    MOV     DPTR,#PWMA_CR1
    MOVX    A,@DPTR
    ORL     A,#01H              ;开始计时
    MOVX    @DPTR,A      
   
    RET

;========================================================================
; 函数: F_UpdatePwm
; 描述: 更新PWM占空比值.
; 参数: [PWMn_Duty_H PWMn_Duty_L]: pwm占空比值.
; 返回: none.
; 版本: V1.0, 2021-3-3
;========================================================================
F_UpdatePwm:
    MOV     A, PWM1_Duty_H      ;设置占空比时间
    MOV     DPTR, #PWMA_CCR1H
    MOVX    @DPTR, A
    MOV     A, PWM1_Duty_L
    MOV     DPTR, #PWMA_CCR1L
    MOVX    @DPTR, A

    RET

;**************** 中断函数 ***************************************************
F_Timer0_Interrupt: ;Timer0 1ms中断函数
    PUSH    PSW     ;PSW入栈
    PUSH    ACC     ;ACC入栈
   
        CLR TR0
    MOV      TL0,#00H      ;T0定时10毫秒
    MOV      TH0,#00H
      
        CPL INT_TIME
        MOV C,INT_TIME
        JC  F_INT2
      
    MOV     A,#0H             ;关闭PWM输出
    MOV     DPTR,#PWMA_ENO
    MOVX    @DPTR,A            
        NOP
        NOP
        CLR P2.0                  ;输出脚拉低        
      
    JMP INT_END
      
      
F_INT2:
      
        MOV     A,#01H             ;使能 PWM1P 输出
    MOV     DPTR,#PWMA_ENO
    MOVX    @DPTR,A
    JMP INT_END

F_QuitTimer0:
    LCALL   F_UpdatePwm
        INT_END:
        SETB TR0
    POP     ACC     ;ACC出栈
    POP     PSW     ;PSW出栈
    RETI


;======================================================================

    END
回复 送花

使用道具 举报

该用户从未签到

552

主题

9546

回帖

1万

积分

管理员

积分
14066
发表于 2024-3-10 21:23:07 | 显示全部楼层
截图202403102123033273.jpg
回复 支持 反对 送花

使用道具 举报

该用户从未签到

552

主题

9546

回帖

1万

积分

管理员

积分
14066
发表于 2024-3-10 21:23:36 | 显示全部楼层
截图202403102123338338.jpg
回复 支持 反对 送花

使用道具 举报

该用户从未签到

552

主题

9546

回帖

1万

积分

管理员

积分
14066
发表于 2024-3-10 21:24:51 | 显示全部楼层
截图202403102124053801.jpg

截图202403102124342440.jpg

回复 支持 反对 送花

使用道具 举报

  • TA的每日心情
    奋斗
    10 小时前
  • 签到天数: 76 天

    [LV.6]常住居民II

    4

    主题

    677

    回帖

    1065

    积分

    金牌会员

    积分
    1065
    发表于 2024-3-11 11:53:22 | 显示全部楼层
    汇编语言编写程序
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 14:31
  • 签到天数: 35 天

    [LV.5]常住居民I

    1

    主题

    42

    回帖

    233

    积分

    中级会员

    积分
    233
    发表于 2024-3-26 10:47:29 | 显示全部楼层
    楼主还是转C吧,大家可以一起跟着看看

    点评

    我是从汇编转到C的,现在看汇编确实看的头疼  发表于 2024-3-26 17:01
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    14

    主题

    33

    回帖

    204

    积分

    中级会员

    积分
    204
     楼主| 发表于 2024-3-26 16:10:50 | 显示全部楼层
    springvirus 发表于 2024-3-26 10:47
    楼主还是转C吧,大家可以一起跟着看看

    学习中
    回复 支持 反对 送花

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-20 17:34 , Processed in 0.078160 second(s), 56 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表