- 1、本文档共19页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
51单片机与Dino928的单机通讯实验讲解
期末專題報告書單片機与Dino 928的单机通讯实验班別:资讯工程 丙 班組別:15組員一:曹睿龙(組員二:谢晓喆(動機制作的初期,发现蓝牙是一个可能很普遍存在于大众的模组,出于推陈出新这样的想法,我们决定不再致力于书本上已有的实验,而是努力向外延伸,寻找更多有新意的提案所谓无通讯,无物联。IOT应该是物物相连的网际网路,如果一个物体装上感测器和制动元件就可以叫智能设备的话,恐怕与真正的物联网还有一定的距离。所以本组所致力的是物联设备与其他处理设备的通讯过程,实现对原有Arduino装置的扩充。構想实验1:本组果断放弃了蓝牙,转而决定用红外线机制,传输一个键码值给MCU,再让MCU控制不同位于Arduino的PIN口进行后续判断实验2:使用串口通讯,将MCU受到的PC端串口信息处理并转发给Arduino,并严格规定时间控制其走停。專題特色此次实验重点在于通讯交互过程在技术实施方面,我们所采用信号发起方式是由单片机接收不同的讯号,包括红外和PC端UART两种。传输上使用简单的数字信号判断和串口单机通讯两种通讯模式,分别由实验1和实验2完成。在外观形态方面,本组仿照单机游戏“Minecraft”中“爬行者”角色的外形,制作 Dino 928的外壳。外壳体由轻质纸塑壳拼接而成。下底经过打磨,使其摩擦力减小以便于移动製作專題所遇到之困難以及解決方法困難一: 由於ardiuno與80C51單片機的收發波特率不一樣,80C51單片機需要自定義,ardiuno默認為19200,當初沒有考慮到波特率的問題導致收發頻率不一,ardiuno無法正常接收來自80C51單片機的串口訊號。解決: 查詢資料發現80C51有專門控制發送頻率的代碼,將兩者波特率調製9600,雙方就能實現正常收發數據。困難二: 鍵碼讀取的中斷與LED動態顯示的中斷衝突,導致數碼管不規律閃爍。解決: 不斷分析中斷源,最終找到合適的流程設計,編寫出合適代碼解決LED燈閃爍問題。困難三: SBUF配置不正確,80C51單片機控制發送語句沒寫循環,由於發送指令一次只能發送一位,如果不循環則ardiuno緩衝池只能收到一位,而ardiuno只能接受數字信號,對單個位沒有處理功能,則緩沖池不接受這樣的單個位,導致收不到信號。解決: 在80C51串口發送數據編程中加入循環語句,使發送的數字信號能夠完整發送。結果呈現实验一:实验二:外形:程式碼实验一:51单片机部分:#include reg52.hsbit ADDR3 = P1^3;sbit ENLED = P1^4;sbit go=P2^1;sbit stop=P2^2;sbit back=P2^3;unsigned char code LedChar[] = { //数码管显示字符转换表 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E};unsigned char LedBuff[6] = { //数码管显示缓冲区 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};unsigned char T0RH = 0; //T0重载值的高字节unsigned char T0RL = 0; //T0重载值的低字节extern bit irflag;extern unsigned char ircode[4];extern void InitInfrared(void);void ConfigTimer0(unsigned int ms);void main(){ EA = 1; //开总中断 ENLED = 0; //使能选择数码管 ADDR3 = 1; InitInfrared(); //初始化红外功能 ConfigTimer0(1); //配置T0定时1ms PT0 = 1; //配置T0中断为高优先级,启用本行可消除接收时的闪烁 while (1) { if (irflag) //接收到红外数据时刷新显示 { irflag = 0;switch(ircode[2]) { case 0X0C: LedBuff[0] = LedChar[1];break; case 0X18: {LedBuff[0] = LedChar[2];go=0;back=1;stop=1;}break
文档评论(0)