|
目的是想用串口1打印调试信息。
板子上的晶振是24MHZ的。
现在的问题是,在win7平台下,编译下载代码到ram后串口打印出来的是乱码,在winxp下可以打印字符串,但是打印%d这样的数值为实际数值×256,比如printf("val=%d",3);则串口printf出来的是768,很是奇怪,不知又遇到这样问题的朋友吗?
测试代码如下:
main.c
- #include <fx2.h>
- #include <fx2regs.h>
- #include <stdio.h>
- #include"uart.h"
- extern BYTE flag;
- void main(void)
- {
- char buff[16]="123456789\n";
- char cmd[]="are you ok ma ?";
- char k=3;
- char i=0;
- REG_Init();
- SerialPort_Init();
- EA = 1;
- Uart1_printf("k1=%x\n",k);
- while(1)
- {
- if(flag==1)
- {
- flag=0;
- for(i=0;i<sizeof(buff);i++)
- {
- Serial_SendChar(buff[i]);
- }
- Uart1_printf("cmd=[%s],k=%d\n",cmd,k);
- //Serial_SendChar(temp_data);
- }
- }
- }
复制代码
uart.c
- #include <stdio.h>
- #include<string.h>
- #include<stdlib.h>
- #include <stdarg.h>
- #include <fx2.h>
- #include <fx2regs.h>
- #include"uart.h"
- BYTE temp_data=0;
- BYTE flag=0;
- void REG_Init()
- {
- CPUCS = 0x10; //48Mhz
- CKCON = (CKCON&(~bmSTRETCH)) | 1;
- }
- void SerialPort_Init()
- {
- TMOD = (TMOD & 0x0F) | 0x20; // ???1????2,????
- CKCON |= 0x10; //T1M = CLKOUT/4
- EICON |= 0x80; //??SMOD1=1,?????
- SCON1 = 0x50; //???1????1,10?????,REN=0,?????RI1=0,TI1=0
- TH1 = 0xD9; //???1???
- ES1 = 1; //????1??
- TR1 = 1;
- EA = 1;
- TI1=1;
- }
- void Serial_SendChar(BYTE source)
- {
- SBUF1 = source;
- while(TI1 == 0);
- TI1 = 0;
- }
- void Serial_Interrupt1() interrupt 7
- {
- if(RI1 == 1)
- {
- RI1 = 0;
- //temp_data = SBUF1;
- //SBUF1=0;
- flag = 1;
- }
- }
- ////////////////////////////////////////////////////////
- void Uart1_printf(char *str,...)
- {
- char xdata buf[128];
- unsigned char i = 0;
- va_list ptr;
- va_start(ptr,str);
- memset(buf,0,sizeof(buf));
- vsprintf(buf,str,ptr);
- while(buf[i])
- {
- Serial_SendChar(buf[i]);
- i++;
- }
- }
复制代码
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|