P
piscaroy
Guest
嗨,
我遇到了和我的串行通信的问题时做了一些景致发送和接收...当我使用串行COM工具(高级串行端口监视器- ASPM)将数据发送到我的PIC18f452,它工作正常(这意味着它可以接收并显示在液晶显示器),但是当我换了另一个我的项目,该项目是使用Visual Basic(mscom编码部分)计划将数据发送到我的知情同意,知情同意这一次只能识别com端口的串行数据,但无法在LCD上显示的数据...我已经测试了VB的代码..我用VB的发送发送通过COM端口1和使用数据的ASPM监视港口..,并能捕获数据显示在窗口...我奥索试图改变波特率
, 但仍然doesn't工作..怎么会喜欢逸??暂帮助...非常感谢
我的代码...
代码:
#包括<p18f452.h>
#包括<usart.h>
#包括<stdlib.h>
#包括<delays.h>
#包括<xlcd.h>
#包括<string.h>#定义BUFF_SIZE 20
15#定义Return回页首
#定义MAX_CHAR 15/ /辅助函数
无效readFrmEEPROM(廉政报告,廉政字节字符* tempStr);
无效writeStr2EEPROM(廉政报告,烧焦*海峡);/************************************************* ***********************/
/*******************子程序***********************/
/************************************************* ***********************//********************************************/
/**********液晶显示子程序***************/
/********************************************// / I / O配置
(无效无效InitializePORTS)
(
TRISC = 0xE0;
)/ /液晶初始化
无效DelayPORXLCD()
(
Delay1KTCYx(15)/ /在15毫秒延迟)
无效DelayXLCD(无效)
(
Delay1KTCYx(5);
)
无效DelayFor18TCY(无效)
(
NOP产品向导();
NOP产品向导();
NOP产品向导();
NOP产品向导();
NOP产品向导();
NOP产品向导();
NOP产品向导();
NOP产品向导();
NOP产品向导();
NOP产品向导();
NOP产品向导();
NOP产品向导();
NOP产品向导();
NOP产品向导();
NOP产品向导();
NOP产品向导();
返回;)
无效LCDinit(无效)(门= 0x00;ADCON1 = 0x0E;OpenXLCD(0x28); / /初始化液晶显示器4位接口下半字节,
/ /多行DelayXLCD();
)
无效LCDclr(无效)(
WriteCmdXLCD状态(0x01);
DelayXLCD();
)
/********************液晶年底rountine ************************* ** /(无效)无效Delay5s(
Delay10KTCYx(250);
Delay10KTCYx(250);
)/************************************************* *** /
/********** EEPROM的子程序***************/
/************************************************* *** /
/ / EEPROM的初始化
无效EEpromInit(无效)(
EECON1 = 0x00;EECON1bits.WREN = 1; / / EECON章允许写周期设置)无符号字符ReadEEPROM(无符号字符地址)
(EEADR =地址;EECON1bits.EEPGD = 0; / /获取数据EEPROM
EECON1bits.CFGS = 0; / /访问闪存程序/数据EEPROM存储器EECON1bits.RD = 1; / /使读取
返回EEDATA; / /数据存储在这里
)
无效WriteEEPROM(无符号字符地址,字符数据)
(EEADR =地址; / /
EEDATA =数据; / /
EECON1bits.EEPGD = 0;
EECON1bits.CFGS = 0;
EECON1bits.WREN = 1;INTCONbits.GIEH = 0; / /禁用中断
INTCONbits.GIEL = 0;EECON2 = 0x55;
EECON2 =包含0xAA;EECON1bits.WR = 1;
而(EECON1bits.WR); / /等待铁必须清楚
EECON1bits.WREN = 0; / /禁用写就写完整)
/************************************************* ******/
/ *函数写字符串的EEPROM提供的地址* /
/************************************************* ******/无效writeStr2EEPROM(廉政报告,烧焦*海峡)(
廉政len;
= 0整合酶;长度= strlen(海峡);/ /循环写入EEPROM的每个字符
为(1 = 0;“MAX_CHAR,我 )(
WriteEEPROM(地址 我,海峡[一]);
/ /测试= readEERPOM(EEADR 1);
)
)/************************************************* ******/
/ *函数来读取EEPROM的X字节给予地址* /
/ * X字节必须最多15个字符* /
/************************************************* ******/
无效readFrmEEPROM(廉政报告,廉政字节字符* tempStr)(
= 0整合酶;如果(字节“= MAX_CHAR)(
为(1 = 0;“字节,我 )(
tempStr [我] = ReadEEPROM(地址 1);
)
)
tempStr [字节] ='\ 0';
)
/***********************完例行******************/的EEPROM
/************************************************* *************/
/ *主程序* /
/************************************************* *************// /主programm
无效的main()(
廉政writeAdd,readAdd;
字符recData [15];
字符tempRead [15];
字符计数器;
字符counter1;InitializePORTS();
EEpromInit();
LCDinit();
/ /配置的USART
OpenUSART(USART_TX_INT_OFF&
USART_RX_INT_OFF&
USART_ASYNCH_MODE&
USART_EIGHT_BIT&
USART_CONT_RX&
USART_BRGH_HIGH,
25);Delay10KTCYx(50); / /延迟0.5秒而(1)(而(!DataRdyUSART()); / /检查数据是否接收和使用getsUSART(recData,17); / /从串行COM端口17个字符
计数器= 0;做(
WriteEEPROM(柜台,recData [计数器]);
反 ;)在(反“16);putrsXLCD(“等待...");Delay10KTCYx(100); / /延迟1秒WriteCmdXLCD状态(0x01); / / CLR的液晶显示器计数器= 0;做(
tempRead [计数器] = ReadEEPROM(柜台);
反 ;
)在(反“16);putsXLCD(tempRead);Delay10KTCYx(200); / /延迟2秒WriteCmdXLCD状态(0x01); / / CLR的显示器))
我遇到了和我的串行通信的问题时做了一些景致发送和接收...当我使用串行COM工具(高级串行端口监视器- ASPM)将数据发送到我的PIC18f452,它工作正常(这意味着它可以接收并显示在液晶显示器),但是当我换了另一个我的项目,该项目是使用Visual Basic(mscom编码部分)计划将数据发送到我的知情同意,知情同意这一次只能识别com端口的串行数据,但无法在LCD上显示的数据...我已经测试了VB的代码..我用VB的发送发送通过COM端口1和使用数据的ASPM监视港口..,并能捕获数据显示在窗口...我奥索试图改变波特率
, 但仍然doesn't工作..怎么会喜欢逸??暂帮助...非常感谢
我的代码...
代码:
#包括<p18f452.h>
#包括<usart.h>
#包括<stdlib.h>
#包括<delays.h>
#包括<xlcd.h>
#包括<string.h>#定义BUFF_SIZE 20
15#定义Return回页首
#定义MAX_CHAR 15/ /辅助函数
无效readFrmEEPROM(廉政报告,廉政字节字符* tempStr);
无效writeStr2EEPROM(廉政报告,烧焦*海峡);/************************************************* ***********************/
/*******************子程序***********************/
/************************************************* ***********************//********************************************/
/**********液晶显示子程序***************/
/********************************************// / I / O配置
(无效无效InitializePORTS)
(
TRISC = 0xE0;
)/ /液晶初始化
无效DelayPORXLCD()
(
Delay1KTCYx(15)/ /在15毫秒延迟)
无效DelayXLCD(无效)
(
Delay1KTCYx(5);
)
无效DelayFor18TCY(无效)
(
NOP产品向导();
NOP产品向导();
NOP产品向导();
NOP产品向导();
NOP产品向导();
NOP产品向导();
NOP产品向导();
NOP产品向导();
NOP产品向导();
NOP产品向导();
NOP产品向导();
NOP产品向导();
NOP产品向导();
NOP产品向导();
NOP产品向导();
NOP产品向导();
返回;)
无效LCDinit(无效)(门= 0x00;ADCON1 = 0x0E;OpenXLCD(0x28); / /初始化液晶显示器4位接口下半字节,
/ /多行DelayXLCD();
)
无效LCDclr(无效)(
WriteCmdXLCD状态(0x01);
DelayXLCD();
)
/********************液晶年底rountine ************************* ** /(无效)无效Delay5s(
Delay10KTCYx(250);
Delay10KTCYx(250);
)/************************************************* *** /
/********** EEPROM的子程序***************/
/************************************************* *** /
/ / EEPROM的初始化
无效EEpromInit(无效)(
EECON1 = 0x00;EECON1bits.WREN = 1; / / EECON章允许写周期设置)无符号字符ReadEEPROM(无符号字符地址)
(EEADR =地址;EECON1bits.EEPGD = 0; / /获取数据EEPROM
EECON1bits.CFGS = 0; / /访问闪存程序/数据EEPROM存储器EECON1bits.RD = 1; / /使读取
返回EEDATA; / /数据存储在这里
)
无效WriteEEPROM(无符号字符地址,字符数据)
(EEADR =地址; / /
EEDATA =数据; / /
EECON1bits.EEPGD = 0;
EECON1bits.CFGS = 0;
EECON1bits.WREN = 1;INTCONbits.GIEH = 0; / /禁用中断
INTCONbits.GIEL = 0;EECON2 = 0x55;
EECON2 =包含0xAA;EECON1bits.WR = 1;
而(EECON1bits.WR); / /等待铁必须清楚
EECON1bits.WREN = 0; / /禁用写就写完整)
/************************************************* ******/
/ *函数写字符串的EEPROM提供的地址* /
/************************************************* ******/无效writeStr2EEPROM(廉政报告,烧焦*海峡)(
廉政len;
= 0整合酶;长度= strlen(海峡);/ /循环写入EEPROM的每个字符
为(1 = 0;“MAX_CHAR,我 )(
WriteEEPROM(地址 我,海峡[一]);
/ /测试= readEERPOM(EEADR 1);
)
)/************************************************* ******/
/ *函数来读取EEPROM的X字节给予地址* /
/ * X字节必须最多15个字符* /
/************************************************* ******/
无效readFrmEEPROM(廉政报告,廉政字节字符* tempStr)(
= 0整合酶;如果(字节“= MAX_CHAR)(
为(1 = 0;“字节,我 )(
tempStr [我] = ReadEEPROM(地址 1);
)
)
tempStr [字节] ='\ 0';
)
/***********************完例行******************/的EEPROM
/************************************************* *************/
/ *主程序* /
/************************************************* *************// /主programm
无效的main()(
廉政writeAdd,readAdd;
字符recData [15];
字符tempRead [15];
字符计数器;
字符counter1;InitializePORTS();
EEpromInit();
LCDinit();
/ /配置的USART
OpenUSART(USART_TX_INT_OFF&
USART_RX_INT_OFF&
USART_ASYNCH_MODE&
USART_EIGHT_BIT&
USART_CONT_RX&
USART_BRGH_HIGH,
25);Delay10KTCYx(50); / /延迟0.5秒而(1)(而(!DataRdyUSART()); / /检查数据是否接收和使用getsUSART(recData,17); / /从串行COM端口17个字符
计数器= 0;做(
WriteEEPROM(柜台,recData [计数器]);
反 ;)在(反“16);putrsXLCD(“等待...");Delay10KTCYx(100); / /延迟1秒WriteCmdXLCD状态(0x01); / / CLR的液晶显示器计数器= 0;做(
tempRead [计数器] = ReadEEPROM(柜台);
反 ;
)在(反“16);putsXLCD(tempRead);Delay10KTCYx(200); / /延迟2秒WriteCmdXLCD状态(0x01); / / CLR的显示器))