




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、通信系统工程实践报告姓名: 学号:学院:信息学院专业:通信工程指导老师: 时间:2015年12月22日一、创建一个新的工程1. ProjectProject Wizard点击下一步选择芯片选择Toolsuite并确保没有打叉,设置储存位置点击下一步创建新的工程文件,选择一个文件夹,确定后即可在这个文件家里找到自己创建的工程添加文件或稍后创建文件后添加完成。2.FileNew(或点击快捷栏New File 图标) 无论是.h还是.c文件,编辑完成后保存,保存时即可选择保存为.h还是.c往文件夹中添加刚刚保存的.h、.c文件即可二、串口通信实验:1)步骤1、将IDE 3、Explorer 16主板
2、、音频子板、音频线、扩音器、电脑连接好,打开主板电源;2、打开MPLAB,点击FileOpen WorkspaceDTMF_710A_ASM_REV - OKdtmf_gen.mcw3、此时,界面将出现层层叠叠的许多窗口,现在,点击WindowTile Horizontally使各窗口水平排列或点击WindowTile Vertically使各窗口垂直排列;4、点击ProgrammerSelect ProgrammerMPLAB ICD 3;5、点击ProjectBuild All或点击快捷菜单栏中的Build All按钮,如果出现语言工具选择对话框,则一律选择上方的Use this;6、点击
3、ProgrammerProgram,开始烧录程序;7、打开串口调试助手,选择电脑此时的串口(打开设备管理器即可看到是哪一个COM口;波特率选择19200;8、在输入框中输入#*0129字符,点击手动发送,则看到界面显示了输入的内容,主板上的显示频同样显示了输入的内容,同时听到拨号音。9、将自动发送打钩,串口调试助手将自动循环发送输入的内容。减小自动发送周期,原本清晰连续的拨号音将变快,继续减小周期,将变成不断地噪音;2)问题发现1.Buil All 失败。2.通过实验发现,每次只能返回输入内容的前8位。3.在在自己的电脑上安装MPLAB后打不开工作区。3)问题解决1.对于Build All失败
4、:点击ProjectSelect Language Tool LocationMicrochip C30Toolsuite。2.对于只返回前8位:将串口调试助手的数据位由8位改至10位依然只返回前8位而不是前10位。再改为6位时,只返回前6位。由此可知,仅返回8位不仅和串口调试助手这款软件有关,还与实验程序有关,由于能力有限,我没有找到具体原因。3.对于打不开工作区文件,检查是否安装mplabc30-v3_31-windows-installer.exe,检查安装路径是否正确,检查工作区文件路径是否含有中文等或违规字符,经检查,问题出在我将工作区文件放在了一个中文名文件夹下,导致软件不能识别,
5、修改后顺利打开。三、 MPLAB使用心得1. 程序#Include 中modems.h在file窗口中未找到,这时可以在文件夹中搜索2. 修改字体、字形、大小:EidtProperties. TextSelect Font在这个窗口中,即可修改字体等参数,选择合适的字大小能方便阅读程序。其实EidtProperties.有更多功能,现例举如下:3、在C File Types选项卡中,选中Line number,可以显示代码行序号,方便查看;4、在C File Types选项卡中,取消Double click toggles breakpoint选项,可以取消双击鼠标设置断点,代替为双击选中选取
6、单词,再次双击选取整行;5、在C File Types选项卡中,选中Enable Code Floding选项,可以实现代码折叠功能;6、在Tools tips选项卡中,选中AutoComplete下面的几个选项,可以在输入源代码的时候自动提示函数集结构体。7、选中use tabedd window,实现可使打开地多个源文件,显示在一个标签栏上,方便源文件切换。 8、Window中Tile Horizontally/Vertically可以使窗口水平/垂直排列,方便浏览。效果如下:四、dsPIC33F Demo for Explorer 16 Board程序理解总体理解:程序始终在执行hour
7、s、minutes、seconds的加法工作,由hexdec.c程序提取出时分秒的十位数和个位数,再由一些汇编语言结合LATD、TRISA等寄存器使LCD显示数字。本程序选择了带PLL的在XT晶振模式下的主振荡器,即使用了内置8MHz的FRC震荡器,分频后产生的FOSC为32.4MHz。由此获得了200us、1ms、2ms、5ms、15ms以及1s的延时。通过延时使得时分秒间隔各自所需延时加一,提取了十位数和个位数后再显示到了LCD屏上。于是实现了实时时钟功能。以下为详细程序理解(粗体为源程序,其余为我的理解):_FOSCSEL(FNOSC_PRIPLL);_FOSC(FCKSM_CSDCMD
8、 & OSCIOFNC_OFF & POSCMD_XT);_FWDT(FWDTEN_OFF);在p33FJ256GP710A.h中可查到如下定义:#define FNOSC_PRIPLL 0xFFFB 转化为2进制:1111111111111011,查手册知选用带PLL 的主(XT、HS 或EC)振荡器所以FNOSC_PRIPLL为带PLL 的主(XT、HS 或EC)振荡器#define FCKSM_CSDCMD 0xFFBF 转化为二进制:111111111011111,查手册知:FCKSM_CSDCMD为禁止时钟切换,禁止故障保护时钟监视器#define OSCIOFNC_
9、OFF 0xFFFF转化为二进制:1111111111111111查手册知OSCIOFNC_OFF表示 SC2 为时钟输出#define POSCMD_XT 0xFFFD 转化为二进制:1111111111111101查手册知POSCMD_XT为XT 晶振模式#define FWDTEN_OFF 0xFF7F 转化为二进制:1111111101111111查手册知FWDTEN_OFF即为通过用户软件使能/ 禁止看门狗定时器(可通过清零RCON 寄存器中的SWDTEN 位来禁止LPRC)于是这三条语句实现的功能是:选用带PLL 的主(XT、HS 或EC)振荡器,禁止时钟切换,禁止故障保护时钟监视
10、器,SC2 为时钟输出,XT 晶振模式,通过用户软件使能/ 禁止看门狗定时器(可通过清零RCON 寄存器中的SWDTEN 位来禁止LPRC)PLLFBD = 0x00A0;/给PLL寄存器写入10100000CLKDIV = 0x0048;/给ClDDIV寄存器写入1001000查手册中PLLFBD寄存器表以及CLKDIV表可知:PLLFBD(PLL 反馈分频比寄存器) = 0x00A0; /10100000 162bit 15-9 未实现:读为0bit 8-0 PLLDIV<8:0>:PLL 反馈分频比位(也表示为“M”, PLL 倍频比)010100000=162;CLKDIV
11、(时钟分频比寄存器)= 0x0048;/ 1001000bit 15 ROI:中断恢复位0 = 中断对DOZEN 位没有影响bit 14-12 DOZE<2:0>:处理器时钟分频比选择位000 = FCY/1bit 11 DOZEN:打盹模式使能位0 = 处理器时钟/ 外设时钟频率比强制为1:1bit 10-8 FRCDIV<2:0>:内部快速RC 振荡器后分频比位000 = FRC 被1 分频(默认)bit 7-6 PLLPOST<1:0>:PLL VCO 输出分频比选择位(也表示为“N2”, PLL 后分频比)01 = 输出/4 (默认)bit 5 未实
12、现:读为0bit 4-0 PLLPRE<4:0>:PLL 相位检测器输入分频比位(也表示为“N1”, PLL 预分频比)1000=输入/10由公式 可知FOSC=8*(162/(10*4)=32.4MHz由此可知FCY=FOSC/2=16.2MIPSLATA = 0xFF00; 将发光二极管(d3-d10 / ra0-ra7)低驱动状态TRISA = 0xFF00;集LED引脚(d3-d10 / ra0-ra7)输出home_clr();调用函数lcd_cmd( 0x01 ) TRISD &= 0xFF00; 确保 RD0 - RD7 输出DATA &= 0xFF0
13、0; 准备 RD0 - RD7 DATA |= cmd; lcd的命令字符为0x01RW = 0; 确保 RW 是 0 RS = 0;E = 1; 切换线路EDelay(Delay_5mS_Cnt); 延时5毫秒puts_lcd( (char*) &mytext0, sizeof(mytext) -1 );LCD第一行显示" xxxIC33F Demo "line_2();puts_lcd( (char*) &mytext10, sizeof(mytext1) -1 ); LCD第二行显示"Press S3 to cont"当然如果想要显
14、示其他的信息,只要将之前定义的数组const char mytext = " xxxIC33F Demo "const char mytext1 = "Press S3 to cont"中的内容更改为想要的的即可。如将”xxxIC33F”改为“Hello World”,则将显示“Hello World”。注意不能改为中文,否则出现乱码,因为ASCII表中没有中文。while ( PORTDbits.RD6 )当PORTDbits.RD6=1即当s3未按下的时候,程序在这里死循环,显示屏上只显示”press s3 to start”的欢迎语句。当s3按下,
15、PORTDbits.RD6=0,跳出循环,执行下面的语句。Init_Timer1();在init_timer11中可找到函数定义:void Init_Timer1( void )int current_cpu_ipl; 声明临时变量存储CPU IPLT1CON = 0; 确保定时器1处于复位状态 IFS0bits.T1IF = 0; 重置定时器1中断标志IPC0bits.T1IP = 4; 设置定时器1中断优先级为4IEC0bits.T1IE = 1; 启用定时器1中断PR1 = 0x8000; 设置定时器1周期寄存器 T1CONbits.TCS = 1; 选择外部定时器时钟 char a,
16、b, c, *p; a = 2; b = 0x46; c = 0x57; p = (char *)&OSCCON;以下程序使用32KHz振荡器,低字节解锁顺序并使用LP振荡器 asm volatile ("mov.b %1,%0 n" "mov.b %2,%0 n" "mov.b %3,%0 n" : /* no outputs */ : "r"(p), "r"(b), "r"(c), "r"(a);以下程序执行解锁顺序后重新存储CPU IPL值
17、T1CONbits.TON = 1; 启用定时器1和开始计数#if SLEEP = 1while ( TMR1 < 2 );#endif如果主循环将进入休眠模式,则在这里等待振荡器开始,定时器开始计数以上执行后禁用中断解锁序列home_clr();再次调用函数lcd_cmd( 0x01 );void lcd_cmd( char cmd ) TRISD &= 0xFF00; 确保 RD0 - RD7 输出DATA &= 0xFF00; 准备 RD0 - RD7 DATA |= cmd; lcd的命令字符为0x01RW = 0; 确保 RW 是 0 RS = 0;E = 1;
18、 切换线路EDelay(Delay_5mS_Cnt); 延时5毫秒puts_lcd( (char*) &time_msg0, sizeof(time_msg) -1 ); LCD第一行显示"Time 00:00: 00 "line_2();puts_lcd( (char*) &adc_msg10, sizeof(adc_msg1) -1 ); LCD第二行显示" RP5 = 0.00 Vdc "Init_ADC(); 初始化ADC 程序接下来进入无限循环while ( 1 ) if ( rtc_lcd_update ) hexdec( h
19、ours ); Update_LCD(); rtc_lcd_update = 0; 我认为程序的核心函数是以下函数void Update_LCD( void ) hours LCD行与列的光标位置设置如下 home_it(); cursor_right(); cursor_right(); cursor_right(); cursor_right(); cursor_right();lcd_data(tens + 0x30); ( lcd data()函数定义如下RW = 0; 确保RW为0RS = 1; 断言寄存器选择为1DATA &= 0xFF00; 准备 RD0 - RD7 DA
20、TA |= data; LCD的数据字节 E = 1; Nop(); 汇编语言中的空语句,以占用时间 Nop(); Nop(); E = 0; 切换E信号 RS = 0; 否定寄存器选择0 Delay_Us( Delay200uS_count ); 延时200us Delay_Us( Delay200uS_count ); 延时200us)lcd_data(ones + 0x30);在lcd.c文件中由控制LCD信号寄存器引脚的宏定义可知RW、RS、E等符号的意义:#define RW LATDbits.LATD5 #define RS LATBbits.LATB15 #define E LA
21、TDbits.LATD4 由手册知定义RW代表LATD寄存器Bit5即LATD5 RW -> RD5 LATD寄存器控制LCD灯RW信号RS -> RB15LATD寄存器控制LCD灯RS信号E -> RD4LATD寄存器控制LCD灯E信号#define RW_TRISTRISDbits.TRISD5 #define RS_TRISTRISBbits.TRISB15#define E_TRISTRISDbits.TRISD4RW_TRIS-> TRISD5RS_TRIS -> TRISB15E_TRIS -> TRISD4#define DATA LATE #
22、define DATAPORT PORTE#define TRISDATA TRISE)在lcd_data()中起到核心作用的延时函数定义如下:void Delay( unsigned int delay_count ) temp_count = delay_count +1;asm volatile("outer: dec _temp_count");asm volatile("cp0 _temp_count");asm volatile("bra z, done");asm volatile("do #3200, inn
23、er" );asm volatile("nop");asm volatile("inner: nop");asm volatile("bra outer");asm volatile("done:");void Delay_Us( unsigned int delayUs_count )temp_count = delayUs_count +1;asm volatile("outer1: dec _temp_count");asm volatile("cp0 _temp_co
24、unt");asm volatile("bra z, done1");asm volatile("do #1500, inner1" );asm volatile("nop");asm volatile("inner1: nop");asm volatile("bra outer1");asm volatile("done1:");这两段程序采用汇编语言编写,由于能力有限,没有深究。在头文件delay.h中,定义FCY为16000000,前述可知,FCY=16200
25、000,经检查我没有发现我的问题所在,故我认为处处应定义FCY为16200000。这个头文件分别定义了200us、1ms、2ms、5ms、15ms、1s。只需在lcd_data()、lcd_cmd()中改变调用的延时函数即可改变延时时间,如将lcd_cmd()中的Delay(Delay_5mS_Cnt);改为Delay(Delay_15mS_Cnt);即可延长三倍时间。故作类似更改就可以最终使LCD上显示的时间变快或者变慢。由hexdec.c文件可知,tens为hours十位上的数,ones为个位上的数以下同理minutes LCD行与列的光标位置设置如下 hexdec( minutes );
26、将 cursor_right(); cursor_right(); lcd_data(tens + 0x30); lcd_data(ones + 0x30);seconds LCD行与列的光标位置设置如下 hexdec( seconds ); cursor_right(); cursor_right(); lcd_data(tens + 0x30); lcd_data(ones + 0x30); 由isr_timer1.c知,当seconds达到59时,再加一变为00,当minutes达到59时,再加一变为00,当hours达到23时,再加一变为00当IFS0bits.T1IF = 0时,重置Timer 1 中断。程序命令rtc_lcd_update = 1;以其为执行Update_LCD();的标志。同样,在程序isr_ADC.c中,定义了ADC中断程序。本程序未理解的部分:1. 主程序中的if ( adc_lcd_update ) line_2(); advolt( temp1 ); cursor_right(); cursor_right(); cursor_right(); cursor_right(); cursor_right(); cursor_right(); cursor_right(); lcd_data( adones ); cursor_
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 藤制品企业的品牌形象传播策略考核试卷
- 电机在消防设备的紧急响应考核试卷
- 人教版《分数的概念与应用》课件
- 谷物储存的粮食储存容量提升考核试卷
- 塑料制品的环保法规遵守考核试卷
- 新车上户需要什么手续和上户流程
- 环境卫生课件
- 网络安全防护在能源交易平台的数据保护评估考核试卷
- 耐火土石矿山绿色开采与循环经济考核试卷
- 2025年石英或云母填充塑料项目建议书
- 2022年巫山县教师进城考试笔试题库及答案解析
- 青少年模拟法庭剧本(敲诈勒索)
- 万用表校准报告
- 新闻采访与写作(马工程笔记)
- DB32∕T 1703-2011 科技成果转化服务规范总则
- SQ-02-绿色食品种植产品调查表0308
- 视频结构化大数据平台解决方案
- SolidWorks、CAD三维建模练习习题图
- 光伏发电项目安全专项投资估算方案
- 大学生物技术分析教材与教学设计
- 皮尔逊Ⅲ型曲线模比系数计算(共享版).xls
评论
0/150
提交评论