本帖最后由 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
|