要求pic18f452的
时间: 2023-10-09 20:04:30 浏览: 88
PIC18F452+Proteus双机通信 串口通信 键盘更改波特率源程序
好的,下面给出一个使用汇编实现将数字转换成 ASCII 码并存储到指定地址的例子,使用的是汇编器 MPLAB X IDE 中的 PIC Assembler,目标芯片是 PIC18F452。假设座位号是23:
```asm
; 配置寄存器
list p=18F452
include "p18f452.inc"
__CONFIG _CONFIG1H, _OSC_HSPLL_1H ; 选择高速振荡器,使用 PLL,系统时钟频率为 40MHz
__CONFIG _CONFIG2L, _BOR_OFF_2L & _PWRT_ON_2L & _WDT_OFF_2L ; 关闭复位时的低电压检测,开启上电复位定时器,关闭看门狗定时器
__CONFIG _CONFIG2H, _LVP_OFF_2H & _BROWNOUT_OFF_2H & _DEBUG_ON_2H ; 关闭低电压编程,关闭复位时的低电压检测,开启调试模式
__CONFIG _CONFIG3H, _MCLRE_ON_3H ; 开启 MCLR 引脚复位功能
__CONFIG _CONFIG4L, _XINST_OFF_4L & _STVR_OFF_4L ; 关闭扩展指令集,关闭 LVD 低电压检测
; 定义变量
CBLOCK 0x20
seat_number: DS 1 ; 定义座位号
hex_number: DS 1 ; 定义十六进制数
ascii_number: DS 1 ; 定义 ASCII 码
ENDC
; 程序入口
ORG 0x0000
GOTO main
; 中断向量表
ORG 0x0008
GOTO isr
; 主程序
ORG 0x0018
main:
; 初始化
BANKSEL TRISA
CLRF TRISA ; 将端口 A 设为输出
BANKSEL PORTA
CLRF PORTA ; 端口 A 输出零
; 将座位号读入
BANKSEL seat_number
MOVLW 23 ; 将座位号赋值为 23
MOVWF seat_number
BANKSEL hex_number
CLRF hex_number
convert:
; 将数字转换成十六进制
MOVF seat_number, W
MOVWF FSR
MOVLW 16
MOVWF ACC
XORWF ACC, W
MOVWF BSR
CLRW ascii_number
convert_loop:
MOVF INDF, W
XORWF ACC, W
DIVWF BSR, W
MOVWF FSR
MOVF INDF, W
MOVWF hex_number
MOVF BSR, W
MULWF hex_number
ADDWF ascii_number, W
MOVWF ascii_number
INCF FSR, F
DECFSZ hex_number, F
GOTO convert_loop
; 将 ASCII 码存储到指定地址
BANKSEL TRISA
BANKSEL PORTA
BANKSEL ascii_number
MOVF ascii_number, W
MOVWF PORTA ; 存储到端口 A
INCF ascii_number, F
MOVF ascii_number, W
MOVWF PORTA ; 存储到端口 A+1
; 循环
GOTO $-1
; 中断服务程序
isr:
RETFIE
END
```
这个程序使用了除法运算将数字转换成十六进制数,然后根据余数转换成对应的 ASCII 码,并存储到端口 A 和 A+1 中。注意,这个程序假设座位号是23,如果需要转换其他数字,需要进行相应的修改。另外,这个程序没有使用数据 EEPROM 存储数据,而是使用了变量定义在数据存储器中。如果需要使用 EEPROM 存储数据,需要进行相应的修改。
阅读全文