59pic USART 232汇编程序

发布者:数字思维最新更新时间:2017-12-06 来源: eefocus关键字:59pic  USART 手机看文章 扫描二维码
随时随地手机看文章

INCLUDE          ;MCU PIC16F877  DIP40 

LIST     P=PIC16F877 

;__CONFIG  _CP_OFF & _DEBUG_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC & _LVP_OFF  ;PIC16F877 

;__IDLOCS 0x7206 


 errorlevel  -302  
   errorlevel  -203 

CBLOCK  20H 
COUNTERH 
COUNTERL 
COUNTER 
TEMP1 
TEMP2 
TEMP3 
TEMP4 
TEMP_A 
TEMP_B 
TEMP_C 
DADR 
CNT 
EE_DADR 
ENDC 


#DEFINE START_KEY PORTB,1 
#DEFINE BELL  PORTD,0 

 ORG 00H 
 NOP 
 GOTO START 
 ORG 04H 
 GOTO _INT 

; ORG 0100H 
;******************************************** 
;查问题回答 1 字符表(共 25 个字符) 

TABLE1 
 ADDWF PCL,F 
 DT "\n\r-My name is P16F877.\n\n\r" 
      ;\n 换行 
      ;\r 回车 

;查问题回答 2 字符表(共 22 个字符) 

TABLE2 
 ADDWF PCL,F 
 DT "\n\r-I’m 3 years old.\n\n\r" 

  

;查问题回答 3 字符表(共 27 个字符) 

TABLE3 
 ADDWF PCL,F 
 DT "\n\r-I’m born in ShangHai.\n\n\r" 

  

;查问题回答 4 字符表(共 34 个字符) 

TABLE4 
 ADDWF PCL,F 
 DT "\n\r-Yes,I like sports very much.\n\n\r" 

  

;查问题回答 5 字符表(共 28 个字符) 

TABLE5 
 ADDWF PCL,F 
 DT "\n\r-The date is 2007-2-15.\n\n\r" 

;******************************************* 
;初始化和提示信息字符表(共 74 个字符) 

TABLE 
 ADDWF PCL,F 
 DT "\nHello!\n\r" 
 DT "I’m your new friend,Nice to meet you." 
 DT "What do you want to know?\n\n\r" 
;******************************************** 

 ORG 0100H 
;******************************************** 
;问题 5 字符表(共 22 个字符) 

TAB5 
 ADDWF PCL,F 
 DT "What’s the date today?" 


;问题 4 字符表(共 19 个字符) 

TAB4 
 ADDWF PCL,F 
 DT "Do you like sports?" 


;问题 3 字符表(共 20 个字符) 

TAB3 
 ADDWF PCL,F 
 DT "Where were you born?" 


;问题 2 字符表(共 16 个字符) 

TAB2 
 ADDWF PCL,F 
 DT "How old are you?" 


;问题 1 字符表(共 17 个字符) 

TAB1 
 ADDWF PCL,F 
 DT "What’s your name?" 

;******************************************** 
;错误提示 1 字符表(共 64 个字符) 

TABLE6 
 ADDWF PCL,F 
 DT "\n\r-Sorry.I CANnot answer the question." 
 DT "Please ask another one.\n\n\r" 


;错误提示 2 字符表(共 48 个字符) 

TABLE7 
 ADDWF PCL,F 
 DT "\n\r-What your enter is wrong.Please try again.\n\n\r" 
;******************************************** 

 ORG 0200H 
_INT 
 NOP 
 NOP 
 RETFIE 

START 
        NOP 
        BSF      STATUS,RP0 ;定义RA口,RC口全部为输出 
        MOV LW    06H  ; 
        MOV WF    ADCON1  ;设置RA口全部为普通数字IO口 
        MOV LW    B’00110000’ ; 
        MOV WF    TRISA 

        MOV LW    B’11011000’ ;设置SCL为输入, SDA为输入 
        MOV WF    TRISC 
        MOV LW    00H  
        MOV WF    TRISD  ; 
  MOV LW 0FFH 
  MOV WF TRISB 
 BCF OPTION_REG,7 
        BCF      STATUS,RP0 

;**********   IIC 初始化设置  ************ 
  MOV LW 08H             ;初始化SSPCON, 
  MOV WF SSPCON          ;IIC主控模式 
 BCF PIR1,SSPIF 

 BSF STATUS,RP0 
  MOV LW 80H             ;初始化SSPSTAT寄存器, 
  MOV WF SSPSTAT         ;传送速率为标准模式100KHz 
  MOV LW 09H              
  MOV WF SSPADD          ;设定IIC时钟频率 
 CLRF SSPCON2         ;初始化SSPCON2 
 BSF PIE1,SSPIE      ;SSP中断允许 
 CLRF INTCON 
 BSF INTCON,PEIE     ;开中断 
 BSF INTCON,GIE 
 BCF STATUS,RP0 
 BSF SSPCON,SSPEN    ;SSP模块使能 

;**********   IIC 初始化设置结束  ************ 


;**********   USART 初始化设置开始  ************ 

ST BSF STATUS,RP0  
  MOV LW B’00100100’ 
  MOV WF TXSTA  ;异步方式,高波特率,发送使能 
  MOV LW .25 
  MOV WF SPBRG  ;设置波特率 9600,Fosc=4MHz 
 BCF STATUS,RP0 
  
  MOV LW B’10010000’ ;设置连续接收数据 
  MOV WF RCSTA 
  
; CLRF INTCON 
 BSF STATUS,RP0 
 CLRF PIE1 
 BCF STATUS,RP0 

;**********   USART 初始化设置结束  ************ 

 CLRF     PORTA 
;       CLRF     PORTB 
        CLRF     PORTD 
 CALL CLR_RAM 


BEGIN 

;Read Test Counter Value from EEPROM*********************** 
  MOV LW 20H  ;read counterl counterh from eeprom 
  MOV WF DADR 
  MOV LW .2 
  MOV WF CNT 
  MOV LW 00H 
  MOV WF EE_DADR 
 CALL EE_READ 
;Read Test Counter Value from EEPROM*********************** 

;Compare Test Counter Value is zero?************************ 
 CLRZ 
  MOV F COUNTERH,F 
 BTFSS STATUS,Z 
 GOTO PRESS_START_KEY 
 CLRZ 
  MOV F COUNTERL,F 
 BTFSS STATUS,Z 
 GOTO PRESS_START_KEY 
 CALL _ERROR_BELL  
 GOTO BEGIN 
;Compare Test Counter Value is zero?************************ 
  

PRESS_START_KEY 
        BTFSC    START_KEY         ;按开始键开始测试 
        GOTO     $-1 
        CALL     DELAY20MS 
        BTFSC    START_KEY 
        GOTO     $-4 
        BTFSS    START_KEY 
        GOTO     $-1 
        CALL     DELAY20MS 
        BTFSS    START_KEY 
        GOTO     $-4 


;Test Counter decrease 1**************************** 
  MOV LW .1  ;conter decrease 1 
 SUBWF COUNTERL,F 
 BTFSS STATUS,C 
 DECF COUNTERH,F 
 CALL RAM_TO_EE ;write counterl counterh to eeprom 
;Test Counter decrease 1**************************** 

  

  


; GOTO BEGIN 

  

  

  


;输出问候语 

CSH 
  MOV F COUNTER,W 
; BSF PCLATH,0 
 CALL TABLE 
; BCF PCLATH,0 
 CALL FASONG 
 CALL DELAY3 
 INCF COUNTER 
  MOV F COUNTER,W 
 SUBLW .74 
 BTFSS STATUS,Z 
 GOTO CSH 

;******************************************** 

;开始检测并储存外界输入 

LOOP 
 CLRF PIR1  ;清 RCIF 
 CLRF COUNTER 
  MOV LW 30H 
  MOV WF FSR 
 BCF PIR1,RCIF 
JIESHU NOP 
LRC BTFSS PIR1,RCIF 
 GOTO LRC 
  MOV F RCREG,W 
 SUBLW "\r"  ;与 Enter 对应的 ASCII 码比较 
 BTFSC STATUS,Z 
 GOTO WTPD  ;按了回车键,转判断子程序 
  MOV F RCREG,W 
 SUBLW "\b"  ;与退格键 BacksPACe 对应的 ASCII 码比较 
 BTFSC STATUS,Z 
 GOTO TUIGE  ;按了退格键,转退格处理 
  MOV F RCREG,W 
 CALL FASONG 
  MOV WF INDF 
 INCF FSR 
 GOTO LRC 

;******************************************** 

;退格处理子程序 
TUIGE    
  MOV F RCREG,W 
 CALL FASONG 
 DECF FSR 
 GOTO LRC 

;******************************************** 

;问题判断子程序 

WTPD 
  MOV F RCREG,W 
  MOV WF INDF 

;******************************************** 
;和第一个问题进行比较 

PD1 
 CLRF COUNTER 
  MOV LW 30H 
  MOV WF FSR 
LP1 
  MOV F COUNTER,W 
; BSF PCLATH,1 
 BSF PCLATH,0 
 CALL TAB1 
 BCF PCLATH,0 
; BCF PCLATH,1 
 SUBWF INDF,W  ;查表所得的数据与 INDF 的内容相减,结果送 W 
 BTFSS STATUS,Z 
 GOTO PD2  ;内容不符,转 PD2 判断 
 INCF FSR  ;内容相符,数据存储地址加一 
 INCF COUNTER 
  MOV F COUNTER,W 
 SUBLW .17  ;判断是否已到第一个问题的 17 个字符数 
 BTFSS STATUS,Z 
 GOTO LP1  ;没到,继续第一个问题的判断 
  MOV LW "\r"  ; Enter ?? 
 SUBWF INDF,W 
 BTFSS STATUS,Z 
 GOTO CUOWU2  ;不相等,后面还有内容,转到错误提示2 
 CLRF COUNTER 
 GOTO HD1  ;转到回答1 

;******************************************** 
;和第二个问题进行比较 

PD2 
 CLRF COUNTER 
  MOV LW 30H 
  MOV WF FSR 
LP2 
  MOV F COUNTER,W 
; BSF PCLATH,1 
 BSF PCLATH,0 
 CALL TAB2 
 BCF PCLATH,0 
; BCF PCLATH,1 
 SUBWF INDF,W  ;查表所得的数据与 INDF 的内容相减,结果送 W 
 BTFSS STATUS,Z 
 GOTO PD3  ;内容不符,转 PD3 判断 
 INCF FSR  ;内容相符,数据存储地址加一 
 INCF COUNTER 
  MOV F COUNTER,W 
 SUBLW .16  ;判断是否已到第一个问题的 16 个字符数 
 BTFSS STATUS,Z 
 GOTO LP2  ;没到,继续第一个问题的判断 
  MOV LW "\r"  ; Enter ?? 
 SUBWF INDF,W 
 BTFSS STATUS,Z 
 GOTO CUOWU2  ;不相等,后面还有内容,转到错误提示2 
 CLRF COUNTER 
 GOTO HD2  ;转到回答2  

;******************************************** 
;和第三个问题进行比较 

PD3 
 CLRF COUNTER 
  MOV LW 30H 
  MOV WF FSR 
LP3 
  MOV F COUNTER,W 
; BSF PCLATH,1 
 BSF PCLATH,0 
 CALL TAB3 
 BCF PCLATH,0 
; BCF PCLATH,1 
 SUBWF INDF,W  ;查表所得的数据与 INDF 的内容相减,结果送 W 
 BTFSS STATUS,Z 
 GOTO PD4  ;内容不符,转 PD4 判断 
 INCF FSR  ;内容相符,数据存储地址加一 
 INCF COUNTER 
  MOV F COUNTER,W 
 SUBLW .20  ;判断是否已到第一个问题的 20 个字符数 
 BTFSS STATUS,Z 
 GOTO LP3  ;没到,继续第一个问题的判断 
  MOV LW "\r"  ; Enter ?? 
 SUBWF INDF,W 
 BTFSS STATUS,Z 
 GOTO CUOWU2  ;不相等,后面还有内容,转到错误提示2 
 CLRF COUNTER 
 GOTO HD3  ;转到回答3 

;******************************************** 
;和第四个问题进行比较 

PD4 
 CLRF COUNTER 
  MOV LW 30H 
  MOV WF FSR 
LP4 
  MOV F COUNTER,W 
; BSF PCLATH,1 
 BSF PCLATH,0 
 CALL TAB4 
 BCF PCLATH,0 
; BCF PCLATH,1 
 SUBWF INDF,W  ;查表所得的数据与 INDF 的内容相减,结果送 W 
 BTFSS STATUS,Z 
 GOTO PD5  ;内容不符,转 PD5 判断 
 INCF FSR  ;内容相符,数据存储地址加一 
 INCF COUNTER 
  MOV F COUNTER,W 
 SUBLW .19  ;判断是否已到第一个问题的 19 个字符数 
 BTFSS STATUS,Z 
 GOTO LP4  ;没到,继续第一个问题的判断 
  MOV LW "\r"  ; Enter ?? 
 SUBWF INDF,W 
 BTFSS STATUS,Z 
 GOTO CUOWU2  ;不相等,后面还有内容,转到错误提示2 
 CLRF COUNTER 
 GOTO HD4  ;转到回答4 

;******************************************** 
;和第五个问题进行比较 

PD5 
 CLRF COUNTER 
  MOV LW 30H 
  MOV WF FSR 
LP5 
  MOV F COUNTER,W 
; BSF PCLATH,1 
 BSF PCLATH,0 
 CALL TAB5 
 BCF PCLATH,0 
; BCF PCLATH,1 
 SUBWF INDF,W  ;查表所得的数据与 INDF 的内容相减,结果送 W 
 BTFSS STATUS,Z 
 GOTO CUOWU  ;内容不符,转 CUOWU 提示1 
 INCF FSR  ;内容相符,数据存储地址加一 
 INCF COUNTER 
  MOV F COUNTER,W 
 SUBLW .22  ;判断是否已到第一个问题的 16 个字符数 
 BTFSS STATUS,Z 
 GOTO LP5  ;没到,继续第一个问题的判断 
  MOV LW "\r"  ; Enter ?? 
 SUBWF INDF,W 
 BTFSS STATUS,Z 
 GOTO CUOWU2  ;不相等,后面还有内容,转到错误提示2 
 CLRF COUNTER 
 GOTO HD5  ;转到回答2 

;******************************************** 
;输出回答 1 

HD1 
  MOV F COUNTER,W 
; BSF PCLATH,0 
 CALL TABLE1 
; BCF PCLATH,0 
 CALL FASONG 
 CALL DELAY3 
 INCF COUNTER 
  MOV F COUNTER,W 
 SUBLW .25 
 BTFSS STATUS,Z 
 GOTO HD1 
 GOTO LOOP  ;输出完毕,转到输出检测 

  

;输出回答 2 

HD2 
  MOV F COUNTER,W 
; BSF PCLATH,0 
 CALL TABLE2 
; BCF PCLATH,0 
 CALL FASONG 
 CALL DELAY3 
 INCF COUNTER 
  MOV F COUNTER,W 
 SUBLW .22 
 BTFSS STATUS,Z 
 GOTO HD2 
 GOTO LOOP  ;输出完毕,转到输出检测 


;输出回答 3 

HD3 
  MOV F COUNTER,W 
; BSF PCLATH,0 
 CALL TABLE3 
; BCF PCLATH,0 
 CALL FASONG 
 CALL DELAY3 
 INCF COUNTER 
  MOV F COUNTER,W 
 SUBLW .27 
 BTFSS STATUS,Z 
 GOTO HD3 
 GOTO LOOP  ;输出完毕,转到输出检测 


;输出回答 4 

HD4 
  MOV F COUNTER,W 
; BSF PCLATH,0 
 CALL TABLE4 
; BCF PCLATH,0 
 CALL FASONG 
 CALL DELAY3 
 INCF COUNTER 
  MOV F COUNTER,W 
 SUBLW .34 
 BTFSS STATUS,Z 
 GOTO HD4 
 GOTO LOOP  ;输出完毕,转到输出检测 


;输出回答 5 

HD5 
  MOV F COUNTER,W 
; BSF PCLATH,0 
 CALL TABLE5 
; BCF PCLATH,0 
 CALL FASONG 
 CALL DELAY3 
 INCF COUNTER 
  MOV F COUNTER,W 
 SUBLW .28 
 BTFSS STATUS,Z 
 GOTO HD5 
; GOTO LOOP  ;输出完毕,转到输出检测 

 CLRF COUNTER 
 CALL DELAY1S 
 CALL _PASS_BELL 
 GOTO BEGIN 

;******************************************** 
;输出错误提示 1 

CUOWU 
 CLRF COUNTER 
LP6  MOV F COUNTER,W 
; BSF PCLATH,1 
 BSF PCLATH,0 
 CALL TABLE6 
 BCF PCLATH,0 
; BCF PCLATH,1 
 CALL FASONG 
 CALL DELAY3 
 INCF COUNTER 
  MOV F COUNTER,W 
 SUBLW .64 
 BTFSS STATUS,Z 
 GOTO LP6 
 GOTO LOOP 


;输出错误提示 2 

CUOWU2 
 CLRF COUNTER 
LP7  MOV F COUNTER,W 
; BSF PCLATH,1 
 BSF PCLATH,0 
 CALL TABLE7 
 BCF PCLATH,0 
; BCF PCLATH,1 
 CALL FASONG 
 CALL DELAY3 
 INCF COUNTER 
  MOV F COUNTER,W 
 SUBLW .48 
 BTFSS STATUS,Z 
 GOTO LP7 
 GOTO LOOP 
;******************************************** 
  


;******************************************** 
;USART 方式发送数据子程序 

FASONG 
  MOV WF TXREG 
 BSF STATUS,RP0 
 BTFSS TXSTA,TRMT 
 GOTO $-1 
 BCF STATUS,RP0 
 RETURN 

;******************************************** 
CLR_RAM 
  MOV LW 20H 
  MOV WF FSR 
 CLRF INDF 
 INCF FSR,F 
 BTFSS FSR,7 
 GOTO $-3 
 RETURN 
;***********************_ERROR_BELL 子程序  ********************************** 
_ERROR_BELL  
        CALL     _PASS_BELL 
        CALL     DELAY200MS 
        CALL     DELAY200MS 
        CALL     _PASS_BELL 
        CALL     DELAY200MS 
        CALL     DELAY200MS 
        CALL     _PASS_BELL 
        CALL     DELAY200MS 
        CALL     DELAY200MS 
        RETURN 
;***********************_PASS_BELL 子程序  ********************************** 
_PASS_BELL 
  MOV LW   .20 
  MOV WF   TEMP_A 
BELL2 
  MOV LW   .190 
  MOV WF   TEMP_B 
BELL1 
 BSF     BELL  ;频率 Hz 
 CALL DELAY125US 
 BCF     BELL 
 CALL DELAY125US 
 DECFSZ  TEMP_B,1 
 GOTO    BELL1 
 DECFSZ  TEMP_A,1 
 GOTO    BELL2 
 RETURN 

;********************************************************** 
DELAY50US 
        MOV lw     .15              ;DELAY50US    
        MOV wf     TEMP1        
        decfsz    TEMP1,F        
        goto      $-1  
 RETLW 0 

;*********************** 250uS 延时子程序 1 ************** 

DELAY125US 
  MOV LW .42  
  MOV WF TEMP_C  
 DECFSZ  TEMP_C,F 
 GOTO     $-1 
 RETURN 

;******************************************** 
DELAY1MS    
        MOV lw     .2        
        MOV wf     TEMP2                                              
        MOV lw     .170        
        MOV wf     TEMP1    
        DECFSZ   TEMP1,F      
        goto      $-1  
        DECFSZ   TEMP2,F 
        GOTO     $-5          
        RETURN 
;******************************************** 
DELAY10MS 
 CALL DELAY1MS 
 CALL DELAY1MS 
 CALL DELAY1MS 
 CALL DELAY1MS 
 CALL DELAY1MS 
 CALL DELAY1MS 
 CALL DELAY1MS 
 CALL DELAY1MS 
 CALL DELAY1MS 
 CALL DELAY1MS 
 RETLW 0 

;******************************************** 
;延时子程序,约 10MS 

DELAY3 
  MOV LW .20 
  MOV WF TEMP1  
LOOP1 
  MOV LW .166 
  MOV WF TEMP2 
 DECFSZ TEMP2 
 GOTO $-1 
 DECFSZ TEMP1 
 GOTO LOOP1 
 RETURN 

;******************************************** 
;延时 20MS 子程序 

DELAY20MS                                              
        MOV lw     .40        
        MOV wf     TEMP2  
DELAY20MS_1    
        MOV lw     .166        
        MOV wf     TEMP1    
        DECFSZ   TEMP1,F      
        goto      $-1  
        DECFSZ   TEMP2,F 
        GOTO     DELAY20MS_1            
        RETURN 
;******************************************** 
DELAY200MS                                              
        MOV lw     .10        
        MOV wf     TEMP3 
DELAY200MS_2 
        MOV lw     .40        
        MOV wf     TEMP2  
DELAY200MS_1    
        MOV lw     .166        
        MOV wf     TEMP1    
        DECFSZ   TEMP1,F      
        goto      $-1  
        DECFSZ   TEMP2,F 
        GOTO     DELAY200MS_1 
        DECFSZ   TEMP3,F 
        GOTO     DELAY200MS_2 
        RETURN 
;********************************************              
DELAY1S                                    
        MOV lw     .50        
        MOV wf     TEMP3 
DELAY1S_2 
        MOV lw     .40        
        MOV wf     TEMP2  
DELAY1S_1    
        MOV lw     .166        
        MOV wf     TEMP1    
        DECFSZ   TEMP1,F      
        goto      $-1  
        DECFSZ   TEMP2,F 
        GOTO     DELAY1S_1 
        DECFSZ   TEMP3,F 
        GOTO     DELAY1S_2 
        RETURN 

;******************************************** 
RAM_TO_EE: 
  MOV LW 20H 
  MOV WF DADR 
  MOV LW .2 
  MOV WF CNT 
  MOV LW 00H 
  MOV WF EE_DADR 
 CALL EE_WRITE 
 RETURN  

;*********************************EE_WRITE*********************************** 
;本程序实现从内部RAM传送多字节数据到内部EEPROM。 
;入口参数:原操作数的地址放在DADR中,目标EEPROM的地址放在EE_DADR中,字节数在W中。 
;出口参数:相关数据已写入指定EEPROM单元中。 
;占用资源:W,STATUS,FSR,一重堆栈。 
;************************************************************************** 
EE_WRITE: 
  MOV F DADR,W 
  MOV WF FSR            ;RAM 单元首地址 
  MOV F EE_DADR,W 
 BANKSEL PIE1  ;BANK1 
 BCF PIE1,EEIE      ;关闭EE中断 
 BANKSEL EEADR  ;BANK2 
  MOV WF EEADR          ;将目标地址写入EEADR 
EE_LOOP2: 
 BANKSEL PORTA  ;BANK0 
  MOV F INDF,W 
 BANKSEL EEDATA  ;BANK2 
  MOV WF EEDATA         ;将源数据写入EEDATA 
 BANKSEL EECON1  ;BANK3 
 BCF EECON1,EEPGD ;指定 EEPROM 为操作对象 
 BSF EECON1,WREN    ;写允许 
 BCF INTCON,GIE     ;关闭中断 
  MOV LW 55H            ;MICROChip 
  MOV WF EECON2         ;规 
  MOV LW 0XAA           ;定 
  MOV WF EECON2         ;代码 
 BSF EECON1,WR      ;开始写入 
 BCF EECON1,WREN    ;写保护 
 BTFSC EECON1,WR      ;写完了吗?            
 GOTO $-1 
 BANKSEL PORTA  ;BANK0 
  INCF FSR,F          ;写下一个数据 
  BANKSEL EEADR  ;BANK2 
  INCF EEADR,F 
  BANKSEL PORTA  ;BANK0 
 DECFSZ CNT,F          ;所有字节的数据写完了吗? 
 GOTO NEXT1    
 BSF INTCON,GIE     ;重新开总中断            
  RETURN 

NEXT1: 
  GOTO EE_LOOP2 

;********************************EE_READ*********************************** 
;本程序实现从内部连续的EEPROM单元传送多字节数据到内部RAM。 
;入口参数:原操作数在EEPROM中的首地址放在EE_DADR中,目标RAM的首地址放在DADR中, 
;          字节数放在CNT中。 
;出口参数:相关数据已在指定的连续RAM单元中 
;占用资源:W,STATUS,FSR,内部EEPROM模块,一重堆栈。 
;*************************************************************************** 
EE_READ:                                            
 BANKSEL PORTA  ;BANK0 
  MOV F DADR,W      
  MOV WF FSR          ;目标RAM的地址 
  MOV F EE_DADR,W 
 BANKSEL EEADR  ;BANK2 
  MOV WF EEADR        ;地址 
EE_READ1:                    
 BANKSEL EECON1  ;BANK3 
 BCF EECON1,EEPGD ;指定 EEPROM 为操作对象 
 BSF EECON1,RD    ;开始读取 
 BANKSEL EEDATA  ;BANK2 
  MOV F EEDATA,W 
 BANKSEL PORTA  ;BANK0 
  MOV WF INDF         ;依次取出连续的数据 
 INCF FSR,F 
 BANKSEL EEADR  ;BANK2 
 INCF EEADR,F 
 BANKSEL PORTA  ;BANK0 
 DECFSZ CNT,F        ;判断所有字节的数据是否取完 
 GOTO EE_READ1 
 RETURN 

;*************************************************************************** 
 ORG 0x2100 
 DE 00H,0AH,00H,00H,00H,00H 
  
 END

关键字:59pic  USART 引用地址:59pic USART 232汇编程序

上一篇:pic单片机4x4键盘扫描程序
下一篇:PIC单片机扩展8255A并口

推荐阅读最新更新时间:2024-03-16 15:48

STM32F103中USART2的使用
USART1程序很多,看看USART2程序。注意红色部分,首先要使能相关端口的时钟。 因为USART2可以映射成不同的端口,所以要端口映射。 结合你自己的开发板,设置正确的映射口.(正点原子的是PA03PA02.) STM32F103ZE默认的USART2就是PA03PA02,如果配置映射,USART2端口是PD05PD06了。 程序在正点原子开发板SRAM中调试通过,开发环境IAR5.30. void USART2_Initialise( u32 bound ) { GPIO_InitTypeDef GPIO_InitStructure;//I/O¿ú3õê¼»ˉ½á11ìå NVIC_InitTypeDef
[单片机]
STM32F103中<font color='red'>USART</font>2的使用
STM32入门学习之USART(STM32F030F4P6基于CooCox IDE)
#include stm32f0xx.h #include stm32_lib/inc/stm32f0xx_rcc.h #include stm32_lib/inc/stm32f0xx_gpio.h #include stm32_lib/inc/stm32f0xx_usart.h int main(void) { //1、使能时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE); //特别注意:因为串口有使用GPIO,所以对应GPIO的时钟也要使能 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
[单片机]
USART test---ATMEGA128
#include avr/io.h #define fosc 16000000UL //晶振16MHZ #define baud 9600//波特率 #define com0 void uart0_init(void) { UCSR0B = 0x00; //disable while setting baud rate UCSR0A = 0x00; UCSR0C =(1 UCSZ01)|(1 UCSZ00);//8bit+1bit stop UBRR0L=(fosc/16/(baud+1))%256; UBRR0H=(fosc/16/(baud+1))/256; UCSR0B =(1 RXE
[单片机]
STM32CUBEIDE(7)----USART收发配置
概述 本章STM32CUBEMX配置STM32F103,测试串口发送接收函数。 最近在弄ST和GD的课程,需要样片的可以加群申请:6_15061293。 生成例程 使用STM32CUBEMX生成例程,这里使用NUCLEO-F103RB开发板 查看原理图,PA2和PA3设置为开发板的串口。 配置串口。 开启中断。 STM32CUBEIDE配置 若需要打印浮点型,需要勾选下面的选项。 串口重定向 在main.c中,添加头文件,若不添加会出现 identifier FILE is undefined报错。 /* USER CODE BEGIN Includes */ #include stdio.h /
[单片机]
STM32CUBEIDE(7)----<font color='red'>USART</font>收发配置
RS232与RS485谁才是UART中的高速公路
串口通讯是电子工程师面对的最基本的一个通讯方式,RS-232是其中最简单的一种。然而,很多初学者往往搞不清楚UART和RS-232、RS-422、RS-485的联系和区别,本文将谈谈我对这几个概念的理解,帮助大家理清它们之间的关系。 通讯问题,和交通问题一样,也有高速、低速、拥堵、中断等等各种情况。如果把串口通讯比做交通,UART比作车站,那么一帧的数据就好比汽车。汽车跑在路上,要遵守交通规则。如果是市内,一般限速30、40,而高速公路则可以到120。而汽车走什么路,限速多少,就要看协议怎么规定了。常见的串口协议有RS-232、RS-422、RS-485等,那么谁才是UART中的高速公路?下面我们就一起来探讨一下。 一
[嵌入式]
CP2101(2102)制作USB-RS232转换器原理
CP2101(CP2102)是美国Silicon公司产品,是高度集成USB转UART功能并可使PCB最小空间提供简单的解决方案的专用芯片,CP2101包含USB2.0全速功能的控制器,USB收发器,时钟,EEPROM和异步串行数据总线(UART)全部信号解调控制,无需外部USB元件,封装尺寸为5x5mm MLP-28. 应用场合:   ・广泛应用的RS232转USB. ・蜂窝电话USB界面电缆 ・PDA USB界面电缆 ・USB 转RS232串行适陪器. 虚拟串口驱动。   ・现有的串口应用. ・WINDOWS98/2000/XP操作系统 ・MAC OS-9 ・WINDOWS CE.
[嵌入式]
USB RS-232转换卡设计
与RS 232总线的数据传输速率相比,USB的传输速率高达480 Mb/s,因此很多计算机的RS 232串行接口都被USB接口所替换,但是很多仪器仪表、控制终端、远程终端等设备的接口还是沿用RS 232。为解决两个接口之间的转换,设计并研制了USB-RS 232接口转换卡。从USB和RS 232通信协议出发,详细介绍USB-RS 232转换卡的设计原理,并以CH341T芯片为例,设计并制作了USB-RS 232转换卡。利用研制的USB-RS 232转换卡连接具有RS 232接口的温湿度传感器,在运行监控程序后,传感器运行稳定,能正确显示温湿度数据,且表明该转换卡可成功地实现RS 232接口与USB接口的转换。   1 USB-R
[模拟电子]
USB RS-<font color='red'>232</font>转换卡设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved