找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3708|回复: 0
打印 上一主题 下一主题
收起左侧

基于pic单片机的循迹小车设计(汇编语言)

[复制链接]
跳转到指定楼层
楼主
电路原理图如下:


;----------------------------------------------------
                         INCLUDE"F:\MPASM Suite\P16F877A.INC"
                         TMR0B EQU 029H                ;10MS
;-------------------------------------------------
;主程序
;--------------------------------------------------
                                          ORG 0000H  
                       NOP
                        BSF STATUS,RP0
                                                 MOVLW 00H
                                                 MOVWF TRISC           
                                                MOVLW B'11110000'   ;定义RD口的高4位为前置四个红外光反信号的输入,低四位作为输出控制电机IN1/IN2/IN3/IN4
                                                MOVWF TRISD
                       MOVLW 07H     ;TMR0定时器分频比为1:256
                        MOVWF OPTION_REG
                                                 GOTO ST
                                                                                                                                       
;--------------------------------------------  
;初始化PWM1、2
;--------------------------------------------
ST                      BSF STATUS,RP0
                        MOVLW 0FFH
                                                 MOVWF PR2
                                                 BCF STATUS,RP0
                                             MOVLW 4DH
                                                 MOVWF CCPR1L
                       MOVWF CCPR2L
                       CALL WIDTH3030
                                                 MOVLW 0CH
                                                 MOVWF CCP1CON             ;CCPxX、CCPxY置零
                        MOVWF CCP2CON
                                                 ;CLRF T2CON                         ;定义定时器TMR2工作方式为1:1分频
                        MOVLW B'00000011'                ;定义定时器TMR2工作方式        1:16分频
                                           MOVWF T2CON
                                                 BSF T2CON,TMR2ON        ;启动TMR2定时
                        CALL TEST1
                        GOTO $-1

                       ; MOVLW 0FFH
                      ;  MOVWF PR2
                       ; MOVLW 0CH
                      ;  MOVWF CCP1CON
                       ; MOVWF CCP2CON
                           ; MOVLW B'00000011'                ;定义定时器TMR2工作方式        1:16分频
                                   ;        MOVWF T2CON
                                        ;CALL WIDTH3030           ;设置脉宽为30 30         
                        ;BSF T2CON,TMR2ON  
                      ;  CALL TEST1
                      ;  GOTO $-1
;----------------------------------------------
;脉宽控制调制
;---------------------------------------------
WIDTH3030                            MOVLW 30H                ;CCP1设置为30%占空比
                        MOVWF CCPR1L  
                                            MOVLW 28H                 ;CCP2设置为30%占空比
                        MOVWF CCPR2L  
                        RETURN
WIDTH2040               MOVLW 7H                ;CCP1设置为20%占空比
                        MOVWF CCPR1L  
                                            MOVLW 48H                 ;CCP2设置为40%占空比
                        MOVWF CCPR2L  
                        RETURN
WIDTH4020               MOVLW 51H                ;CCP1设置为40%占空比
                        MOVWF CCPR1L  
                                            MOVLW 7H                 ;CCP2设置为20%占空比
                        MOVWF CCPR2L  
                        RETURN

;---------------------------------------------
;  光反数据放入26H  
;--------------------------------------------
TEST1                    BCF STATUS,RP0      ;返回体0
                                         MOVF PORTD,W                 
                         MOVWF 25H         ;将检测信息放入25H
                         MOVF 25H,W
                                             MOVWF 26H                   ;将检测信息转至中间变量
                                             SWAPF 26H,F
;----------------------------------------------------------
;检验光反,控制转向
;--------------------------------------------------------
                         BTFSC 26H,2
                                                 GOTO DET2          ;左侧广反输出为1时,未检测到黑线,转而检测右侧输出
                                             GOTO DET1                        ;左侧广反输出为0时,检测到黑线,转而检测右侧输出
DET1                                     BTFSC 26H,1
                                                 GOTO RIGHT111                 ;0X1: 右拐               
                             GOTO RUN111                ;0X0:停止                                          
DET2                             BTFSC 26H,1                 
                                             GOTO RUN111                  ;1X1时,直行
                         GOTO LEFT111                        ;1X0时,左拐
                              
;----------------
;直行子程序
;---------------
                 RUN111 BCF STATUS,RP0
                        BCF PORTC,6            ;直行,两灯都不亮
                        BCF PORTC,7      
                        CALL WIDTH3030
                                                  MOVF PORTD                        
                                                MOVWF 27H
                                                MOVLW 0F0H
                                                ANDWF 27H,F
                                                MOVLW B'00001010'         ;IN1:1  IN2:0  IN4:1  IN3:0  :          直行
                                                ADDWF 27H,W
                                                MOVWF PORTD
                                            GOTO LEGEND1
;---------------------------
;停止子程序
;---------------------------
                STOP111 BCF STATUS,RP0
                        BSF PORTC,6            ;直行停止,两灯都灭
                        BSF PORTC,7   
                                                  MOVF PORTD                        
                                                MOVWF 27H
                                                MOVLW 0F0H
                                                ANDWF 27H,F
                                                MOVLW B'00000000'         ;IN1:0  IN2:0  IN4:0  IN3:0  :          停止
                                                ADDWF 27H,W
                                                MOVWF PORTD
                                                   GOTO LEGEND1                        
;--------------------------------
;左拐子程序
;--------------------------------
LEFT111                               BCF STATUS,RP0
                        BSF PORTC,7                ; 右拐,亮右转向灯
                        BCF PORTD,6
                        CALL WIDTH2040
                                                  MOVF PORTD                        
                                                MOVWF 27H
                                                MOVLW 0F0H
                                                ANDWF 27H,F
                                                MOVLW B'00001010'               ;IN1:0  IN2:0  IN4:1  IN3:0  :          左拐
                                                ADDWF 27H,W
                                                MOVWF PORTD
                                           GOTO LEGEND1               
;---------------------------------
;右拐子程序
;---------------------------------
RIGHT111                BCF STATUS,RP0
                        BSF PORTC,6                       ; 右拐,亮右转向灯
                        BCF PORTD,7
                        CALL WIDTH4020
                                                  MOVF PORTD                        
                                                MOVWF 27H
                                                MOVLW 0F0H
                                                ANDWF 27H,F
                                                MOVLW B'00001010'         ;IN1:1  IN2:0  IN3:0  IN4:0  :          右拐
                                                ADDWF 27H,W
                                                MOVWF PORTD
                LEGEND1                       RETURN
;---------------------------------------
;延时子程序
;---------------------------------------
DELAY10MS             BCF INTCON,T0IF
                    MOVLW TMR0B
                    MOVWF TMR0
                LP1 BTFSS INTCON,T0IF
                    GOTO LP1
                   RETURN
;------------------------------------------------------
                      END   
;---------------------------------------------------   

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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