请帮助!!

S

sidartha

Guest
我试图代码sotware UART和一个8051C410硬件UART ..
硬件UART是同PC上附加传感器的软件UART通信..然而
, 尽管硬件UART的正常工作的软件UART不..
我重视的代码
, 并希望有人能够帮助我在这里..[/代码]

/ /#杂注大
#包括<c8051f410.h>
#包括<stdio.h>
#包括<string.h>
#包括<stdlib.h>#定义系统时钟8分之24500000

#定义波特率9600#定义TIME_COUNT SYSCLK/9600/12 / /主成分分析计数1位的时间。
#定义TH_TIME_COUNT TIME_COUNT * 3 / 2 / / 3 / 2位时,常设仲裁法院/ SWUART//------------------------------------------------ ----------------------------------------------
sbit SW_TX =的P2 ^ 6;
sbit SW_RX =小^ 0;位SM_BUSY;
位斯里兰卡; / / SW_UART接收完整的指标
位性病; / / SW_UART传输完成指标
位STXBSY; / / SW_UART德克萨斯州忙标志
位瑟伦; / / SW_UART Rx启用
位经济局局长; / / SW_UART用户级中断支持
字符贸发报告; / / SW_UART德克萨斯州数据寄存器
字符共和; / / SW_UART收发数据寄存器

//------------------------------------------------ ----------------------------------------------
/ /函数原型
//------------------------------------------------ ----------------------------------------------
无效init_uart0(无效);
无效SYSCLK_Init(无效);
无效PORT_Init(无效);
无效enable_intr(无效);
无效init_swuart(无效);
无效WriteSwuart(字符*指针);//------------------------------------------------ ----------------------------------------------
/ /主例程
//------------------------------------------------ ----------------------------------------------

无效的主要(无效)(
实体数据字符海峡[100];
廉政= 0,ñ = 0;

PCA0MD&=〜0x40; / / WDTE = 0(清除看门狗定时器
PCA0MD = 0X00;
PORT_Init(); / /初始化交叉和GPIO
SYSCLK_Init(); / /初始化系统时钟
init_uart0();
init_swuart();
enable_intr();

工商局局长= 1;

而(1)

sprintf(海峡,“你好%d个\ r”开始,格 );
WriteSwuart(海峡);


//------------------------------------------------ ----------------------------------------------
无效WriteSwuart(字符*指针)(
位传输= 1;

虽然(传输)(
如果(性病)(
工商局局长= 0;
贸发= *指针;
如果(*指针=='\ R')的传输= 0;
CCF1 = 1;
指针 ;



//------------------------------------------------ ----------------------------------------------
无效SYSCLK_Init(无效)

OSCICN = 0x84;

//------------------------------------------------ ----------------------------------------------
无效PORT_Init(无效)

P0SKIP = 0xCF;

XBR0 = 0x01; / / UART0和提供SPI,SMBus选择
XBR1 = 0x41; / /允许交叉开关和弱上拉
P1MDOUT | = 0xFF;
P2MDOUT | = 0xFF;
稀土= 0;
P0MDIN =〜0x08;

//------------------------------------------------ ----------------------------------------------
无效init_uart0(无效)


SCON0 = 0x10;
TH1 = - (SYSCLK/BAUDRATE/2);
CKCON&=〜0X0B;
CKCON | = 0X08;

TL1 = TH1;
TMOD&=〜0XF0;
TMOD | = 0X20;

TR1的= 1;

TI0 = 1;


//------------------------------------------------ ----------------------------------------------
无效enable_intr(无效)(

瑟伦= 0; / /禁用SW_UART接收机
公约与= 1; / /启动PCA计数器。
EIE1 | = 0x10;
EIE1 | = 0x81; / /提供SPI,SMBus中断使能
EIP1 | = 0x01;
EX0 = 1;
IT0 = 1;
ET2 = 1;
ES0 = 1;
鄂A = 1;

//------------------------------------------------ ----------------------------------------------
无效init_swuart(无效)(

PCA0CPM0 = 0x10; / /负捕获模式Module0;
/ /模块0中断禁用。
PCA0CPM1 = 0x48; / /模块1在软件定时器模式;
/ / Module1的中断禁用。
PCA0CN = 0; / /给主成分禁用
PCA0MD | = 0x00; / /主成分分析时基=系统时钟/ 4; PCA计数器
/ /中断禁用。
CCF0 = 0; / /清除待主成分分析模块0
CCF1 = 0; / /模块1捕捉/比较中断。
斯里兰卡= 0; / /清除接收完整的标志。
工商局局长= 0; / /清除发送完成标志。
SW_TX = 1; / / TX线初期高。
STXBSY = 0; / /清除SW_UART忙标志

PCA0CPM0 | = 0x01; / /启用模块0(接收)中断。
PCA0CPM1 | = 0x01; / /启用模块1(传输)中断。

//------------------------------------------------ ----------------------------------------------
/ /软件UART ////////////////////////////////////////////// //////////////////
//------------------------------------------------ ----------------------------------------------
无效PCA_ISR(无效)中断11(
静态字符SUTXST = 0;
静态字符SURXST = 0;
静态无符号字符RXSHIFT;

无符号整型PCA_TEMP;

如果(CCF0)(
CCF0 = 0;

开关(SURXST)(
案件0:
如果(瑟伦&〜SW_RX)(
PCA_TEMP =(PCA0CPH0“”8);
PCA_TEMP | = PCA0CPL0;
PCA_TEMP = TH_TIME_COUNT;
PCA0CPL0 = PCA_TEMP;
PCA0CPH0 =(PCA_TEMP“”8);
PCA0CPM0 = 0x49;

SURXST ;

中断;
例1:例2:例3:例4:例5:例6:例7:例8:

RXSHIFT = RXSHIFT“”1;
如果(SW_RX)
RXSHIFT | = 0x80;
PCA_TEMP =(PCA0CPH0“”8);
PCA_TEMP | = PCA0CPL0;
PCA_TEMP = TIME_COUNT;
PCA0CPL0 = PCA_TEMP;
PCA0CPH0 =(PCA_TEMP“”8);
SURXST ;
中断;

案例9:
共和= RXSHIFT;
斯里兰卡= 1;
PCA0CPM0 = 0x11;
SURXST = 0;

中断;




/ /检查发送中断;服务如果CCF1设置。
否则
, 如果(CCF1)(
CCF1 = 0;
开关(SUTXST)(
案件0:
SW_TX = 0;
PCA_TEMP = PCA0L;
PCA_TEMP | =(PCA0H“”8);
PCA_TEMP = TIME_COUNT;
PCA0CPL1 = PCA_TEMP;
PCA0CPH1 =(PCA_TEMP“”8);
PCA0CPM1 | = 0x48;
SUTXST ;
中断;

例1:例2:例3:例4:例5:例6:例7:例8:例9:
SW_TX =计(TDR&0x01)后;
贸易和发展报告“”= 1;
贸发报告| = 0x80;

PCA_TEMP =(PCA0CPH1“”8);
PCA_TEMP | = PCA0CPL1;
PCA_TEMP = TIME_COUNT;
PCA0CPL1 = PCA_TEMP;
PCA0CPH1 =(PCA_TEMP“”8);
SUTXST ;
中断;

案例10:
工商局局长= 1;
SUTXST = 0;
SW_TX = 1;
PCA0CPM1 = 0x01;STXBSY = 0;
中断;




 
您好

见IAR的申请说明网站- “你会发现软件代码的UART

WWW.IAR.COM

商业登记

波比

 

Welcome to EDABoard.com

Sponsor

Back
Top