我尝试将数据从pc发送到pic微控制器。我是PIC的初学者。 我从超级终端发送数据,数据将显示在PIC的端口B的led中。
我使用了10Mhz时钟和9600波特率的连接。
这是我的uart.h程序:
char UART_Init(const long int baudrate)
{
unsigned int x;
x = (_XTAL_FREQ - baudrate*64)/(baudrate*64);
if(x>255)
{
x = (_XTAL_FREQ - baudrate*16)/(baudrate*16);
BRGH = 1;
}
if(x<256)
{
SPBRG = x;
SYNC = 0;
SPEN = 1;
TRISC7 = 1;
TRISC6 = 1;
CREN = 1;
TXEN = 1;
return 1;
}
return 0;
}
char UART_TX_Empty()
{
return TRMT;
}
char UART_Data_Ready()
{
return RCIF;
}
char UART_Read()
{
while(!RCIF);
return RCREG;
}
void UART_Read_Text(char *Output, unsigned int length)
{
int i;
for(int i=0;i<length;i++)
Output[i] = UART_Read();
}
void UART_Write(char data)
{
while(!TRMT);
TXREG = data;
}
void UART_Write_Text(char *text)
{
int i;
for(i=0;text[i]!='\0';i++)
UART_Write(text[i]);
}
这是我的主要计划:
#include<htc.h>
#include<pic.h>
#define _XTAL_FREQ 10000000 //Clock Frequency
#include "uart.h"
void main()
{
TRISB = 0x00; //PORTB as Output
UART_Init(9600);
do
{
if(UART_Data_Ready())
PORTB = UART_Read();
__delay_ms(1000);
}while(1);
}
在超级终端我发送数据说10010010但是端口B中的led没有响应,我的程序中是否有任何错误?
答案 0 :(得分:0)
您有几个步骤:初始化UART,初始化LED,通过UART进行通信以及设置PC的UART。您成功编写和测试了哪些组件?你说你是初学者,那么你在PIC上成功执行的最小功能程序是什么?多年来我一直在使用微控制器,但我仍然安排了一整天才能启动单个LED,因为它可能是软件问题,硬件问题,电压问题,振荡器问题,PCB问题或编译问题。
以下是我为微芯片提出的步骤:
VDD
和VSS
)。这些是最难实现的部分。 (关于振荡器的问题:只是因为你可以编程芯片,并不意味着振荡器正在工作,因为程序员提供了它自己的时钟。)TXREG = 'U';
U
。如果没有,我将一个示波器连接到线路,以确保PIC正在发送,当我输入字符时PC发送,并且边缘的时间匹配。TXREG = RXREG;
),然后键入超级终端并确保回显字符。还有一点需要注意:
不要让PIC执行SPBRG
计算。 PIC16是8位处理器,10000000需要32位才能存储。整数divison可能会出现打嗝。它可能没有错误,但是没有必要让PIC每次都计算它。事先计算并硬编码值。