本帖最后由 gudengguzhou 于 2013-11-17 19:50 编辑
写了一个用io来模拟uart通信的程序,将PB0配置为输出口作为uart的发送端,但是发觉一直没给他成功赋值。程序如下:- List P=69P461
- Romsize =2048
- ;*******************************************************
- ; 系统寄存器
- ;*******************************************************
- IE EQU 00H
- IR EQU 01H
- TM1 EQU 03H
- TL1 EQU 06H
- TH1 EQU 07H
- PORTA_DATA EQU 08H
- PORTB_DATA EQU 09H
- PIN3_2_CFG EQU 14H
- PORTA_CFG EQU 18H
- PORTB_CFG EQU 19H
- ;*******************************************************
- ; 用户数据寄存器
- ;*******************************************************
- CIG_SEND_IO EQU PIN3_2_CFG
- SEND_IO EQU PORTB_DATA
- KECY_CODE_H EQU 32H
- KECY_CODE_L EQU 33H
- COUNT EQU 34H
- READY_SEND EQU 35H
- BK_T0 EQU 39H
- BK_AC EQU 40H
- ;************************************************************
- ; 程序入口
- ;************************************************************
- ORG 000H
- JMP RESET ;reset中断入口 $000h
- RTNI
- RTNI
- JMP T1_SEVER ;timer1中断入口 $003H
- RTNI
- RTNI
- RESET:
- NOP
- NOP
- NOP
- NOP ;ensure the IC is stability
- LDI KECY_CODE_H,0110B ;
- LDI KECY_CODE_L,1000B
- LDI CIG_SEND_IO,0000B ;将PORTB0配置为I/O口,作为uart的发送端
- LDI PORTB_CFG,0001B ;将PORTB0配置为输出口
- LDI TL1,06H;03H;08H(9600) ;定时26us中断一次(使用内部4M振荡器)
- LDI TH1,0EH;0FH;09H(9600) ;
- LDI TM1,07H ;分频比1:1并启动timer1
- LDI AD_RESULT_L,0
- LDI AD_RESULT_H,0
- MAIN:
- LDI IR,0
- ORIM IE,0000B ;开AD,timer0定时中断
- CALL SEND_CHAR ;将按下的按键键值通过串口发送出去
- MAIN_LOOP:
- JMP MAIN
-
- ;*************************************************
- ; timer1中断服务程序
- ;*************************************************
- T1_SEVER:
- LDA BK_T0,00H ;保存AC的值
- ANDIM IR,1101B ;清timer1中断请求以防多次触发中断
- LDI READY_SEND,1
- STA BK_T0,00H ;恢复AC的值
- RTNI
- RTNI
-
- ;**************************************************
- ; uart发送8位数据
- ;**************************************************
- SEND_CHAR:
- NOP
- LDI SEND_IO,00H ;发送起始位(此指令执行完之后SEND_IO的值并没有为0)
- ....................
- END
|