仅作为学习过程中遇到的问题与解决方式的记录。
- 下载问题
在使用kit3下载代码的时候出现了以下问题。
Programming...
The following memory regions failed to program correctly:
Program Memory
Address: 00000000 Expected Value: 00001683 Received Value: 00003fff
Programming failed
可解决的方法:
- 检查电源是否达到要求(使用kit3进行供电)
- 检查连接是否正确
- 先把Flash擦除,选择erase Flash device,然后program
- 去除外设(其他引脚上不要接外设,比如我这次是写的虚拟串口,在下载程序的时候没有断开usb-ttl导致程序下载不进去)
2023年6月19日补充:重新试了一下,之前出现这个问题好像是因为把GP0拉低了,并不是接了外设的原因。
-虚拟串口
遇到的问题:直接对引脚进行操作能够正确输出,如下。
#define _XTAL_FREQ 4000000
#define uchar unsigned char
#define KEY1 GP2
#define uart_tx GP0
#define BaudRate_9600 104 //1000000us/9600=104.1666 发送1个位所需要的时间
/************设定停止位*****************/
#define State_stop_1 104
#define State_stop_1_5 156
#define State_stop_2 208
/************测试内容:通过控制高低电平尝试输出一个字符a:01100001***************/
void test_a()
{
uart_tx = 0;
__delay_us(BaudRate_9600);//起始位
uart_tx = 1;
__delay_us(BaudRate_9600);
uart_tx = 0;
__delay_us(BaudRate_9600);
uart_tx = 0;
__delay_us(BaudRate_9600);
uart_tx = 0;
__delay_us(BaudRate_9600);
uart_tx = 0;
__delay_us(BaudRate_9600);
uart_tx = 1;
__delay_us(BaudRate_9600);
uart_tx = 1;
__delay_us(BaudRate_9600);
uart_tx = 0;
__delay_us(BaudRate_9600);
uart_tx = 1;
__delay_us(State_stop_1 );//停止位
}
但在后续的写入字符串判断后出现问题,本应输出hello,但出现汉字乱码。
分析后考虑为for循环所占用的时间,通过示波器进行测试后得到for的延时写入程序得以解决。
/模拟串口发生一个字节
void uart_one_tx(uchar data)
{
uchar i=0;
uart_tx=0;
__delay_us(BaudRate_9600); //起始位
/*********8位数据*********/
for(i=0;i<8;i++)
{
{
if(data & 1)
uart_tx = 1;
else
uart_tx = 0;
}
__delay_us(BaudRate_9600-15);
data >> = 1;
}
uart_tx = 1;
__delay_us(BaudRate_9600); //停止位
}
/**字符串输出**/
void uart_send_buff(uchar *buff, uchar length)
{
uchar i;
for( i =0; i < length ; i++)
{
uart_one_tx(buff[i]);
}
}