微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 实习工作小结第七天

实习工作小结第七天

时间:10-02 整理:3721RD 点击:
    今天的工作毫无进展,并不是说什么也没有做,而是说我几乎做了我想到的一切了,然而对于问题的解决毫无帮助!现在我就像是发明灯泡之前的爱迪生,对他而言是找到下一种材料,对我而言是找到我思维的死角!但是今天并不是一无所获。至少是知道了一点常识!    1、程序下载和串口的配置是没有关系的,也就是说,能够下载程序,并不意味着你的串口配置是正确的(当然也不能说明是错的!)。但是下载程序和晶振是有关系的,但是确切的关系我并不是很清楚!
    真的只是一点,再多一点都没有了!
    昨天说的会在下面写上CRC的校验代码和将得到的校验HEX码转换成ASCII码的代码:
#define POLY        0x8005
//参数 *Pushdata  需要校验的字符串
//参数  length    字符串的长度可用strlen()函数获得
unsigned short CRC16_ModBus(unsigned char *Pushdata, unsigned char length) {
        unsigned short Reg_CRC = 0xffff;
        unsigned char Temp_reg = 0x00;
        unsigned char i, j;
        for (i = 0; i<length; i++) {
                Reg_CRC ^= *Pushdata++;
                for (j = 0; j<8; j++) {
                        if (Reg_CRC & 0x0001) {
                                Reg_CRC = Reg_CRC >> 1 ^ 0xA001;
                        }
                        else {
                                Reg_CRC >>= 1;
                        }
                }
        }
        //        Temp_reg=Reg_CRC>>8;
        //        return (Reg_CRC<<8|Temp_reg);                         //ModBusCRC低位在前
        return (Reg_CRC);                                                                                         //ModBusCRC高位在前
}

//参数HEX是计算出来的HEX码,长度为2个字节
//参数是传入的用来接收校验码的数组,长度为4个字节
void HEX_to_ASCII(unsigned short HEX, unsigned char* ASCII) {
        unsigned char tempASCII[4] = {'\0','\0','\0','\0'};
        unsigned char index = 0;
        tempASCII[0] = (HEX & 0xF000) >> 12;
        tempASCII[1] = (HEX & 0x0F00) >> 8;
        tempASCII[2] = (HEX & 0x00F0) >> 4;
        tempASCII[3] = (HEX & 0x000F) >> 0;
        for (index = 0; index < 4; index++) {
                switch (tempASCII[index]) {
                case 0:*(ASCII + index) = '0'; break;
                case 1:*(ASCII + index) = '1'; break;
                case 2:*(ASCII + index) = '2'; break;
                case 3:*(ASCII + index) = '3'; break;
                case 4:*(ASCII + index) = '4'; break;
                case 5:*(ASCII + index) = '5'; break;
                case 6:*(ASCII + index) = '6'; break;
                case 7:*(ASCII + index) = '7'; break;
                case 8:*(ASCII + index) = '8'; break;
                case 9:*(ASCII + index) = '9'; break;
                case 10:*(ASCII + index) = 'A'; break;
                case 11:*(ASCII + index) = 'B'; break;
                case 12:*(ASCII + index) = 'C'; break;
                case 13:*(ASCII + index) = 'D'; break;
                case 14:*(ASCII + index) = 'E'; break;
                case 15:*(ASCII + index) = 'F'; break;
                default:break;
                }
        }
}

     两个函数,应该还算是通俗易懂了!好了今天就到这里!明天如果有新的进展我会写出新的新的,最近回家之后在学习C51,写个小时钟。明天看写多少,尽量公布代码!第一次打算写个简单的时钟!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top