怎样18b20读出的值是0xffTXREG的值

RC522读卡芯片怎么用?_百度知道
RC522读卡芯片怎么用?
COMMAND:CFG。怎么用单片机来控制的:PAGE0;PAGE3。MF RC522通过内部寄存器的读写控制与Mifare 1 IC卡数据通信:TEST;PAGE2,共分4页;PAGE1:COMMAND AND STATUSMF RC522内部有64个寄存器
0x08):读出的值*********************************************************************************************************/
for (i=0;************************************************************************************************************ 函数名称 ;
ucComMF522Buf[1] = 0x70, Command):req_code[IN];
i = 600:写MF522寄存器** 参数说明,unsigned char *pTagType){
char status,tmp | mask);
ucComMF522Buf[6] = 0;
if (status == MI_OK)
unsigned char ucResult = 0,4字节** 返 回 值:无********************************************************************************************************&#47:PcdComMF522()** 函数功能;
if (;********************************************************************************************************** 函数名称;return 0!=0)
if(;}/void PcdAntennaOff(){
ClearBitMask(TxControlR
ucAddr = ((Address&
unsigned char ucComMF522Buf[MAXRLEN]:无********************************************************************************************************&#47,0x07):
i--;*********************************************************************************************************** 函数名称:无********************************************************************************************************&#47:接收到的卡片返回数据**
*pOutLenBit[OUT]:Command[IN];
ClearBitMask(ComIrqReg,&unLen):00 jianjian1981 等级;&#47:寄存器地址**
mask[IN];}return 0,0x80);
/PINSEL0 = 0xx80):Address[IN]:WriteRawRC()** 函数功能:成功返回MI_OK********************************************************************************************************/&
if (n == 0)
n = 1:Address[IN];ucResult = MSPI_SendData (ucAddr);
status = MI_ERR:写入的值** 返 回 值;} 22:RC522命令字**
pIndata[IN];
while ((i:
= 0x12;&#47。**********************************************************************************************************/
return 0:通过RC522和ISO14443卡通讯** 函数说明:卡片类型代码**
0x4400 = Mifare_UltraLight**
0x0400 = Mifare_One(S50)**
0x0200 = Mifare_One(S70)**
0x0800 = Mifare_Pro(X)**
0x4403 = Mifare_DESFire** 返 回 值;
unsigned char irqEn
= 0x00; i++)
= ucComMF522Buf[i];}&#47:选定卡片** 函数说明:复位RC522** 调试说明 ,ucComMF522Buf什么意思:无********************************************************************************************************&#47,操作M1卡最大等待时间25ms
n = ReadRawRC(ComIrqReg)!=0) && ;void ClearBitMask(unsigned char reg,snr_check=0; P0;}&#47,0x03):关闭天线** 函数说明:每次开启或关闭天线发射之间至少有1ms的间隔** 返 回 值,unsigned char mask){
char tmp = 0x0:PcdAntennaOn()** 函数功能;
unsigned int i:寻卡** 函数说明; P0;
return status:寻卡方式**
0x52 = 寻感应区内所有符合14443A标准的卡**
0x26 = 寻未进入休眠状态的卡**
pTagType[OUT]:成功返回MI_OK********************************************************************************************************/if (Command == PCD_TRANSCEIVE)
SetBitMask(BitFramingReg!(n&0x01) && ;
status = MI_ERR,9!(ReadRawRC(ErrorReg)&0x1B))
status = MI_OK;
status = PcdComMF522(PCD_TRANSCEIVE;
if (n & irqEn & 0x01)
status = MI_NOTAGERR;
waitFor = 0x30,PCD_IDLE);
ClearBitMask(Status2R
SetBitMask(TxControlReg,ucComMF522B
ucComMF522Buf[0] = PICC_ANTICOLL1:RC522_RST()** 函数功能 :&********************************************************************************************************** 函数名称; i&
return status:pSnr[IN]; i++)
pOutData[i] = ReadRawRC(FIFODataReg);/}/
ClearBitMask(BitFramingR********************************************************************************************************** 函数名称;
unsigned char waitFor = 0x00;
&#47.7置高
DelayNS(10);InLenB
unsigned char lastB
ucComMF522Buf[6]
^= *(pSnr+i),unsigned char value){
unsigned char ucAreturn 0;}&#47:需将跳线JP5和RST连接; 设置RST控制口为输出
= RST:无********************************************************************************************************/
if (snr_ i&lt:成功返回 MI_OK********************************************************************************************************/
status = MI_ERR;
if (n &gt,irqEn|0x80);char PcdComMF522(unsigned char C i&}&#47,ucComMF522B&#47:置MF522寄存器位** 参数说明;MSPI_SendData(ucAddr);
ucAddr = ((Address&********************************************************************************************************** 函数名称;
ucComMF522Buf[1] = 0x20;
unsigned char ucComMF522Buf[MAXRLEN],
unsigned char *pOutD4;
tmp ReadRawRC(reg);
unsigned int
unLen:卡片序列号;
break,&unLen),7:PcdAntennaOff()** 函数功能.7置低
DelayNS(3),0x80);
ClearBitMask(Status2R
WriteRawRC(void SetBitMask(
status = PcdComMF522(PCD_TRANSCEIVE:防冲撞** 函数说明,0x80);
ucComMF522Buf[0] = PICC_ANTICOLL1!(n&waitFor)); MAXRLEN)
n = MAXRLEN,0x03);void WriteRawRC(unsigned char A********************************************************************************************************** 函数名称:返回数据的位长度** 返 回 值,2;/根据时钟频率调整;
if (i,0x80);char PcdSelect(unsigned char *pSnr){ return 0:PcdRequest()** 函数功能; i&
waitFor = 0x10,0x08);return ucR
WriteRawRC(ComIEnReg,低电平复位&#47,0x80);&#47,0x03);
if (lastBits)
*pOutLenBit = (n-1)*8 + lastB
ClearBitMask(CollRunsigned char ReadRawRC(unsigned char Address){
unsigned char ucA
WriteRawRC(
if ((status == MI_OK) && (unLen == 0x18))
status = MI_OK,ucComMF522B
/&#47,0x80);
i = ReadRawRC(TxControlReg),
unsigned int
*pOutLenBit){
char status = MI_ERR; 设置管脚连接GPIO IO0DIR
= RST:清位值** 返 回 值;
}&#47:PcdAnticoll()** 函数功能;
MSPI_SendData(value);
WriteRawRC(BitFramingR i++)
WriteRawRC(FIFODataR
snr_check ^= ucComMF522Buf[i]:寄存器地址**
value[IN],ucComMF522Buf:每次开启或关闭天线发射之间至少有1ms的间隔** 返 回 值;
tmp = ReadRawRC(reg):ReadRawRC()** 函数功能;
if ((status == MI_OK) && (unLen == 0x10))
= ucComMF522Buf[0]:卡片序列号;
= RST;char PcdAnticoll(unsigned char *pSnr){}&#47:SetBitMask()** 函数功能:发送数据的字节长度**
pOutData[OUT];********************************************************************************************************** 函数名称;n;char PcdRequest(unsigned char req_
status = PcdComMF522(PCD_TRANSCEIVE;********************************************************************************************************** 函数名称;
for (i=0:reg[IN];********************************************************************************************************** 函数名称;
WriteRawRC(CommandReg,&ucComMF522Buf[7]):51积分,ucComMF522B 延时
= RST:通过RC522发送到卡片的数据**
InLenByte[IN],1:无门无派注册?#include #define RST
1 &lt,PCD_IDLE);
&#47:成功返回MI_OK********************************************************************************************************/
lastBits = ReadRawRC(ControlReg) & 0x07;
SetBitMask(ControlR/
*pOutLenBit = n*8;
unsigned int
unLen:清MF522寄存器位** 参数说明!= ucComMF522Buf[i])
status = MI_ERR;
switch (Command)
case PCD_AUTHENT; i++)
ucComMF522Buf[i+2] = *(pSnr+i);1)&0x7E)|0x80:初中二年级文章; 8
WriteRawRC(BitFramingR
ClearBitMask(Status2Reg:读MF522寄存器** 参数说明;
ucComMF522Buf[0] = req_&
unsigned char ucComMF522Buf[MAXRLEN]:33,
unsigned char InLenB********************************************************************************************************** 函数名称;
unsigned int
unLen:pSnr[OUT],0x08);void PcdAntennaOn(){
unsigned char i:寄存器地址** 返 回 值:开启天线** 函数说明;
SetBitMask(FIFOLevelReg:1461门派;
}&#47.7控制RC522复位;
case PCD_TRANSCEIVE:日第 2 楼
--------------------------------------------------------------------------------&#47:置位值** 返 回 值:PcdSelect()** 函数功能;/
CalulateCRC(ucComMF522Buf,0x00),&unLen);
WriteRawRC(CommandR
SetBitMask(CollReg:ClearBitMask()** 函数功能;int RC522_RST (void){
&#47,4字节** 返 回 值;
unsigned char i:寄存器地址**
mask[IN],unsigned char mask){
char tmp = 0x0, pInData[i]);1)&0x7E),
unsigned char *pInD stop timer now
WriteRawRC(CommandR
if (Command == PCD_TRANSCEIVE)
n = ReadRawRC(FIFOLevelReg):reg[IN];&#47,tmp & ~mask)!(i & 0x03))
SetBitMask(TxControlR
*(pTagType+1) = ucComMF522Buf[1]
其他类似问题
为您推荐:
您可能关注的推广
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁吴坚鸿单片机程序风格赏析——(八)第八节:串口通讯之如何提取数据尾_电子发烧友网-爱微帮
&& &&& 吴坚鸿单片机程序风格赏析——(八)第八节…
(1)开场白 上两节都介绍了如何提取数据头,这节将介绍如何提取数据尾(鸿哥发明的词)。数据头是指有效数据在关键字的后面,而数据尾恰恰相反,是指有效数据在关键字 的前面,这两种方式实战中使用非常频繁,我在这里介绍我自己常用的思路,我很少参考别人的东西,这些东西都是我原创,不知道其他的牛人是怎么编的,如有雷 同,纯属巧合。 (2)功能需求: & & & & & 无论是单片机还是上位机,最好在固定协议前多发送一个填充的无效字节0x00,因为硬件原因,第一个字节往往容易丢失。 & & & & & &通讯协议:XX YY &EB 00 55
& & & & & &其中后三位 EB 00 55就是我所说的数据尾,它的有效数据XX YY在数据尾的前面。 & & & & & 任意时刻,从电脑“串口调试助手”上位机收到的一堆数据中,只要此数据中包含关键字EB 00 55 ,并且此关键字前面两个字节的数据XX YY &分别为01 02,那么就往上位机发送“eb &00 aa”表示确认,同时蜂鸣器叫一声。否则,往上位机发送“eb &00 55”表示出错。 (3)硬件原理: 把单片机串口通讯的那两个引脚经过一个MAX3232之后直接跟电脑的9针串口通讯。我发现很多朋友会选MAX232这个芯片,而我本人更加推荐用 MAX3232。因为MAX232只支持5V,不是宽压的,而MAX3232不但支持5V,还支持3V。每个人的记忆力都很宝贵,用232串口我只选 MAX3232,不管它是用5V工作还是3V工作。就像74系列的芯片,我的心中只有你(74HC)没有它(74LS),一样的道理,74HC是宽 压,74LS不是宽压。 (4)源码适合的单片机:PIC18f4520,晶振为22.1184MHz,波特率115200 (5)源代码讲解如下: #include&pic18.h& & & & & //包含芯片相关头文件 //补充说明:吴坚鸿程序风格是这样的,凡是输出IO后缀都是_dr,凡是输入的//IO后缀都//是_sr #define &beep_dr &LATA2 &//蜂鸣器输出 //补充说明:吴坚鸿程序风格是这样的,凡是做延时计数阀值的常量 //前缀都用cnt_表示。 #define cnt_voice_time & 150 &//蜂鸣器响的声音长短的延时阀值 #define cnt_send & 300 & & & & & &//确保接收缓冲区没有继续接收数据,是变量 //send_cnt的溢出阀值 Void usart_service(); & & & &//串口通讯服务程序,放在main函数里 unsigned char asy_recieve(); &//把串口缓冲区的数据一个个提取出来 void eusart_send(unsigned char t_data); //串口发送一个字节的数据 Void Buf_clear() ; &//把余下的缓冲区清零 void Delay11(unsigned int MS); //延时函数 //补充说明:吴坚鸿程序风格是这样的,凡是计数器延时的变量 //后缀都用_cnt表示。 unsigned int voice_time_ & & & &//蜂鸣器响的声音长短的计数延时 unsigned int send_cnt=0; & & & & & &//一串数据从上位机发过来的时候,他们每个字节之间//的延时间隔很短,如果他们的延时间隔一旦超过了这个send_cnt变量的延时,那么就////认为他们的一串数据已经发送完毕 //补充说明:吴坚鸿程序风格是这样的,凡是涉及统计数量的变量 //后缀都用_total表示。 unsigned int RCREG_ & & & & & &//统计串口缓冲区已经收了多少个数据 unsigned int RCREG_read_ & //统计已经从串口缓冲区读出了多少个数据 //补充说明:吴坚鸿程序风格是这样的,凡是用来更新的标识变量,比如液晶刷屏,或者有新接收的串口数据更新等等,后缀一律用_update表示 Unsigned char &send_update=0; &//一旦有数据从上位机发送过来,就会引发串口接收中////断,在串口中断里,我把send_update=1表示目 前正在接收数据,警告单片机先不要//猴急,等串口中断把所有从上位机连续发送过来的一堆数据接收完,再处理。那么什么///时候才知道发送的数据已经发 送完毕了呢?用send_cnt识别。因为在串口中断里,我///每次都会把send_cnt=0,而在main函数里,一旦发现 send_update==1,send_cnt就//会开始自加,当它超过某个数值的时候,就会自动把send_update=0,表示目前已经没// 有数据发送了。而如果有数据不断从上位机传来,send_cnt永远也不会超过某个数值,//因为每个中断它都被清零,这个原理跟看门口狗喂狗的原理很 像。 //补充说明:吴坚鸿程序风格是这样的,凡是用来接收数据的缓冲区数组后缀都用_buf表//示 Unsigned char RCREG_buf[50]; &//串口接收缓冲区,读者可以根据实际项目设置大小 Unsigned char RCREG_buf_temp[50]; &//临时处理串口数据的缓冲区,可以不用那么大 //补充说明:吴坚鸿程序风格是这样的,凡是自锁变量名, 后缀都用_lock表示。 Unsigned char send_lock=0; //补充说明:吴坚鸿程序风格是这样的,凡是在main函数中用的中间变量,前缀m_,后//缀用_char或者_int表示类型 Unsigned int m_ & & &//中间变量,只要是用在main函数里,谁都可以重复用。 //主程序 main() { ADCON0=0x00; & ADCON1=0x0f; & & & & & & & & & & & & & & & //全部为数字信号 & & ADCON2=0xa1; & & & & & & & & & & & & & & & //右对齐 & & RBPU=0; & & & & & & & & & & & & & & & & & & &//上拉电阻 & & SSPEN=0; & & & & & & & & & & & & & & & & & &//决定RA5不作为串口 & &TRISA2=0; &//蜂鸣器输出 & & BRG16=0; & & & & //设置串口通信寄存器 & & BRGH=0; & & SPBRGH=0x00; & & SPBRG=0x02; & & //22.1184MHz晶振,115200波特率 & & SYNC=0; & & SPEN=1; & & TX9=0; & & TXEN=1; & & TXIF=1; & & RX9=0; & & CREN=1; & & RCIE=1; & & PEIE=1; & & GIE=1; & & T1CON=0x24; & & //定时器中断配置 & & TMR1H=0xFE; TMR1L=0xEF; & & TMR1IF=0; & & TMR1IE=1; & & TMR1ON=1; & & TMR1IE=1; //补充说明,以上的内容为寄存器配置,每种不同的单片机会有点差异, //大家不用过度关注以上寄存器的配置,只要知道有这么一回事即可 & & beep_dr=0; & & & & & & & & & & & & & & & //关蜂鸣器,上电初始化IO & &while(1) & & & &{ & & & & & & & & & & &CLRWDT(); //喂看门狗,大家不用过度关注此行 & & & & & & & & usart_service(); & & & &//串口通讯服务 } } & & & & //中断 void interrupt timer1rbint(void) { & & if(RCIE==1&&RCIF==1) & //串口中断,一次只能接受一个字节 { & & & & RCIE=0; & & & & RCIF=0; & & & & ++RCREG_ & //以下代码是鸿哥的在所有串口项目中用到的标准代码 & & & & if(RCREG_total&50) &//超过缓冲区 & & & & { & & & & & &RCREG_total=50; & & & & } & & & & RCREG_buf[RCREG_total-1]=RCREG; &//依次把上位机来的数据存入数组缓冲区 & & & & send_update=1; & &//通知单片机目前正在接收数据 & & & & send_cnt=0; & & & & //及时喂狗,虽然main函数那边不断在累加,但是只要串口的数//据还没发送完毕,那么它永远也长不大,因为每个中断都被清零,很可怜。 & & & & RCIE=1; } & & if(TMR1IE==1&&TMR1IF==1) & &//定时中断 & & & & { & & & & & & & & & & & & &TMR1IF=0; & & //定时中断标志位关闭 & & & & & & & & TMR1ON=0; & &//定时中断开关关闭 & & & if(voice_time_cnt) & & & & & & & & & & & //控制蜂鸣器声音的长短 & & & & & & & & &{ & & & & & & & & & & & & beep_dr=1; & & & & //蜂鸣器响 & & & & & & & & & & & --voice_time_ & & & &//蜂鸣器响的声音长短的计数延时 & & & & & & & & &} & & & & & & & & else
& & & & & & & & { & & & & & & & & & & Asm(“nop”); & //添加此行空指令为了使else的内容跟if的内容对称,意义////不大 beep_dr=0; & & &//蜂鸣器停止 & & & & & & & & } & & & TMR1H=0xFe; & //重新设置定时时间间隔 & & TMR1L=0x00; & & & TMR1ON=1; & & & &//定时中断开关打开 & & } } void usart_service() &//串口服务程序,在main函数里 { & & &if(send_update==1) &//说明目前串口正在接收数据,不要读缓冲区数据 & & &{ & & & & send_lock=1; & & //开自锁标志 & & & & ++send_ & &//只要有数据接收,send_cnt每次都被串口中断清零 & & & & if(send_cnt&cnt_send) & //延时一段时间,确认缓冲区没有继续接受数据 & & & & { & & & & & & send_cnt=0; & & & & & & send_update=0; & & & & & } & & &} & & &Else &//说明当前没有继续接收数据了 & & &{ & & & & &if(send_lock==1) & &//在数据已经接收完毕,并且还没有处理过数据的情况下 & & & & &{ & & & & & & send_lock=0; & &//处理一次就锁起来,不用每次都进来,除非有新接收的数据 & & & & & &m_int=0; & & & & &//中间变量清零,用来统计处理了多少个刚刚接收的数据 & & & & & & while(RCREG_read_total&RCREG_total) & //说明还没有把缓冲区的数据读取完 & & & & & & { & & & & & & & CLRWDT(); & & & & & & & &RCREG_buf_temp[m_int]=asy_recieve(); & & & & & & & &If(m_int&=4) & //说明接收了5个数据以上(2个有效数据加3个数据尾) & & & & & & & { & & & & & if(RCREG_buf_temp[m_int-2]==0xeb&& &RCREG_buf_temp[m_int-1]==0x00&& &RCREG_buf_temp[m_int]==0x55) &//数据尾”eb 00 55”判断 & & & & & & & & &{ & & & & & & & & & if(RCREG_buf_temp[m_int-4]==0x01&& RCREG_buf_temp[m_int-3]==0x02) & & & & & & & & & & & & & & & & & & & & & //有效数据是否为01 02的判断 & & & & & & & & & { & & & & & & & & & & & & & & & & eusart_send(0x00); //串口发送一个填充的无效字节,避免第一个字节丢失 & & & & & & & & & & & & & & & & eusart_send(0xeb); //串口发送应答的数据 eusart_send(0x00); //串口发送应答的数据 eusart_send(0xaa); //串口发送应答的数据 & & & & & & & & & & & & & & & & &voice_time_cnt= cnt_voice_ & &//蜂鸣器响“滴”一声就停 } Else { &eusart_send(0x00); //串口发送一个填充的无效字节,避免第一个字节丢失 eusart_send(0xeb); //串口发送应答的数据 eusart_send(0x00); //串口发送应答的数据 eusart_send(0x55); //串口发送应答的数据 } B & //跳出循环 & & & & & & & & &} & & & & & & & } & & & & & & &m_int++; & &//中间变量加1, & & & & & &} & & & & &Buf_clear(); & //把余下的缓冲区清零,方便下一堆数据接收与处理 & & &
& & & & } & & &} } Void Buf_clear() & //把余下的缓冲区清零 { & & & & &Unsigned char buf_clear_ & & & & & & while(RCREG_read_total&RCREG_total) & //说明还没有把缓冲区的数据读取完 & & & & & & { & & & & & & & & &CLRWDT(); & & & & & & & & &buf_clear_temp =asy_recieve(); & & & & & & &} } unsigned char asy_recieve() &//把串口缓冲区的数据一个个提取出来 { & & & unsigned char RCREG_ & & & ++RCREG_read_ & &//已经读出了多少个数据 & & & RCREG_dt=RCREG_buf[RCREG_read_total -1]; & & & if(RCREG_read_total &=RCREG_total) //只要把全部数据都读完,马上把缓冲区清零 & & & & &{ & & & & & RCREG_read_total =0; & & & & & RCREG_total=0; & & & & &} & & & return RCREG_ } void eusart_send(unsigned char t_data) //串口发送一个字节的数据 { unsigned int error_ & & &TXREG=t_ & //发送数据 & & &error_delay=0;//等待把数据发送完毕 & & &while(1) &//此处也可以直接用延时替代 & & &{ & & & & CLRWDT(); & & & & if(TXIF==1) & //等待把数据发送完毕 & & & & { & & & & & & & & & & } & & & & Else & & & & & &
& & & & { & & & & & ++error_ & & & & & if(error_delay&200) &//超时也要退出,不能死等 & & & & & { & & & & & & & & & & & & } & & & &} & & &} & & &Delay11(1); & &//此处最玄机,要特别注意。每发送完一个字节,由于不同的项目,这//里的延时间隔都不一样,读者根据实际情况来改。这里最容易出问题,必须要延时,尤其是连续发送一堆数据的时候。读者也可以把这种延时改成计数延时的方式。 } //延时函数 void Delay11(unsigned int MS) { & & &unsigned char us, & & &while(MS!=0) & & & & & &//for 12M & & & & & &{
& & & & & & & &CLRWDT(); & & & & & & & & & usn = 2; & & & & & & & & &while(usn!=0) & & & & & & & & & & & &{ & & & CLRWDT(); & & & & & & & & & & & & & & &us=0xf5; & & & & & & & & & & & & & & &while (us!=0){us--;}; & & & & & & & & & & & & & & &usn--; & & & & & & & & & & & &} & & & & & & & & &MS--; & & & & & &} } (6)小结: & & & & & & & 读者掌握了提取数据头与提取数据尾这两种基本编程思路之后,以后在任何串口通讯的项目中,不管在什么情况下,提取什么关键字都可以得心应手了。 (未完待续,下节更精彩,不要走开哦)
点击展开全文
发送120998
悄悄告诉你
更多同类文章
还可知道有多少人阅读过此篇文章哦
阅读原文和更多同类文章
可微信扫描右侧二维码关注后
发送暗号120998
还可知道有多少人阅读过此篇文章哦
关注电子发烧友网助手,即时收听电子行业动态,抢先知晓半导体行业发生的最新事件。
您的【关注和订阅】是作者不断前行的动力
本站文章来自网友的提交收录,如需删除可进入
删除,或发送邮件到 bang@ 联系我们,
(C)2014&&版权所有&&&|&&&
京ICP备号-2&&&&京公网安备346.PIC单片机第六章 功能部件_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
6.PIC单片机第六章 功能部件
上传于||暂无简介
大小:541.00KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢第七章(提高片)_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
第七章(提高片)
上传于||文档简介
&&简​要​介​绍​资​料​的​主​要​内​容​,​以​获​得​更​多​的​关​注
大小:694.50KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢21ic官方微信
后使用快捷导航没有帐号?
查看: 1372|回复: 5
请教USART如何发送整型数据
&&已结帖(10)
主题帖子积分
高级技术员, 积分 807, 距离下一级还需 193 积分
高级技术员, 积分 807, 距离下一级还需 193 积分
主题帖子积分
专家等级:结帖率:80%
主题帖子积分
高级技术员, 积分 807, 距离下一级还需 193 积分
高级技术员, 积分 807, 距离下一级还需 193 积分
各位老师,我在做双机异步通信时,需要将从机的整型数据变量值发送到主机显示,请问USART怎样才能发送整型数据,TXREG是8位寄存器,要发送的整型变量是16位,是要拆开发送吗?刚入门,望高手指点,谢谢!
满意回复+10
unsigned int send_
unsigned int
send1 = (send_dat >> 8) & 0x0f;
// 先发高字节
send2 = send_dat & 0x0f;
主题帖子积分
主题帖子积分
专家等级:结帖率:59%
主题帖子积分
各位老师,我在做双机异步通信时,需要将从机的整型数据变量值发送到主机显示,请问USART怎样才能发送整型数据,TXREG是8位寄存器,要发送的整型变量是16位,是要拆开发送吗?刚入门,望高手指点,谢谢! ...
milktang 发表于
当然要拆开了,分两次装入发送缓冲区。
接收端读两次接受缓冲后一组合不就可以了吗!?
一:我的回帖多数只是猜测/估计/想象,建立在我现有知识结构的理解和分析上,多数都没有动手实际检验过,请斟酌采纳.
二:若对我的技术类主帖或回帖有异议,欢迎讨论,拒绝过激攻击或辱骂,否则全站追杀屏蔽发帖,后果自负.
三:对本人的其它意见,请直接向站长投诉,勿使用站内短信骚扰/挑衅/辱骂,否则将全站追杀屏蔽发帖,后果自负.
主题帖子积分
初级技术员, 积分 51, 距离下一级还需 49 积分
初级技术员, 积分 51, 距离下一级还需 49 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
初级技术员, 积分 51, 距离下一级还需 49 积分
初级技术员, 积分 51, 距离下一级还需 49 积分
顶顶了。。。
芯谷SMT贴片加工厂/
主题帖子积分
中级技术员, 积分 252, 距离下一级还需 48 积分
中级技术员, 积分 252, 距离下一级还需 48 积分
主题帖子积分
专家等级:结帖率:83%
主题帖子积分
中级技术员, 积分 252, 距离下一级还需 48 积分
中级技术员, 积分 252, 距离下一级还需 48 积分
在发送端做个函数把int 转换为两个chat,然后发送。在接收端做个函数把接收到的两个chat,转换为int。
主题帖子积分
初级技术员, 积分 931, 距离下一级还需 -831 积分
初级技术员, 积分 931, 距离下一级还需 -831 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
初级技术员, 积分 931, 距离下一级还需 -831 积分
初级技术员, 积分 931, 距离下一级还需 -831 积分
unsigned int send_
unsigned int&&receive_
send1 = (send_dat && 8) & 0x0f;& & // 先发高字节
send2 = send_dat & 0x0f;& && && && && &// 再发低字节
receive_dat = (receive1 && 8) | receive2;
主题帖子积分
高级工程师, 积分 5885, 距离下一级还需 2115 积分
高级工程师, 积分 5885, 距离下一级还需 2115 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
高级工程师, 积分 5885, 距离下一级还需 2115 积分
高级工程师, 积分 5885, 距离下一级还需 2115 积分
这个自己试试不就行了吗?干吗都要问呢
甘甜之泉水
发帖类勋章
时间类勋章
技术领袖奖章
人才类勋章
终身成就奖章
等级类勋章
坚毅之洋流
发帖类勋章
时间类勋章
无冕之王奖章
等级类勋章
欢快之小溪
发帖类勋章
时间类勋章
技术奇才奖章
人才类勋章
热门推荐 /3

我要回帖

更多关于 8253的计数值如何读出 的文章

 

随机推荐