PIC小结.docVIP

  • 19
  • 0
  • 约3.68千字
  • 约 12页
  • 2016-12-29 发布于江西
  • 举报
PIC工作小结 Led点灯、uart收发 摘要 本文总结了针对pic学习过程中的遇到的问题以及解决的过程。 检查器件 检查power supply power supply 加电,调节直选用通道的5V处,此处选用slave(任选一个),用万用表检查引脚,看是否显示正确,(将万用表调至合适的档位, 红+ 黑- 测量各个引脚, 确认显示正确), 关闭power supply 为什么是5V? 通过查看电路图VDD供电引脚,我们得知核心芯片需要3V电压。 再查看power原理图,得知需要用常用的5V电压经过转换得到3V电压。 找板子的5V引脚,注意连线顺序,对照板子上的正方形引脚。 检查PIC板 查看电路图 根据发光二极管的特性知,当引脚RD8、RD9、RD10、RD11处于低电平时,二极管发光,查看pic引脚图,找到RD8、RD9、RD10、RD11,找到为68、69、70、71脚, 2、检查是否引脚是否有短路现象 用万用表,一个脚接R3、R4、R5、R6(从板子上看到的),一个脚测pic的68、69、70、71脚,看是否导通。 准备连接线 和power supply 连接,注意红+、黑-, 注意连线的正确性,看pcb的j12. 编写程序 设置引脚方向寄存器(从电路图看到是RD8、RD9、RD10、RD11),查看数据手册,找到 TRISD:决定端口的方向,0输出,1输入 PORTD:当方向为输入时,存放端口的值 LATD:数据锁存器 ODCD:漏极开路控制寄存器 设置锁存器 #include?p24FJ128GA010.h ? int?main(void) {? ?????_TRISD8? =?0;????????//设置引脚方向:0 输出;1 输入 _TRISD9 =?0; ?????_TRISD10? =?0; _TRISD11 =?0; ? _LATD8 =? 0;????//设置锁存器的值_LATD9 = 0; _LATD10 = 0; _LATD11 = 0; ? while(1)?{ } ? return?0; } 编译 设置好项目的输出路径、当前路径、头文件路径、库文件路径。 编译,连接 烧写 连接ICD和电脑,PIC板 注意ICD上小白色的箭头指向板子上带有小突起的引脚, 加电,烧写 断电,断开ICD和PIC板,加电,看是否点亮 检查uart电路的连通性 查看电路图 由图知调试口的1接发送、2接地、3接接收口。 由图知j1的下边的为第一脚,1接u18、3接u17。测量u18连接的三个TXD和1;u17和3; 2和gnd的连通性。 注意,测量连通性时,注意不要和其他线路短路,以免烧坏板子。 编写串口发送程序 串口初始化 设置BRGx寄存器为25 由程序配置字知道 选用主振荡器+4xPLL做为时钟源。 OSC1做为输入、OSC2做为输出 此时波特率=8*4/2M/(16*(25+1))=38461约为38400 初始化uart的状态和控制寄存器、模式寄存器。 编写中断处理程序 如何声明ISR以及怎样使用正确的矢量地址初始化IVT,将取决于编程语言(即 C 语言或汇编语言)和用于开发此应用程序的语言开发工具包。 查看链接描述文件,我们可以看到中断向量表段。 SECTIONS { /* ** Interrupt Vector Table */ .ivt __IVT_BASE : { 找到预定的uart收发中断名 LONG( DEFINED(__U1RXInterrupt) ? ABSOLUTE(__U1RXInterrupt) : ABSOLUTE(__DefaultInterrupt)); LONG( DEFINED(__U1TXInterrupt) ? ABSOLUTE(__U1TXInterrupt) : ABSOLUTE(__DefaultInterrupt)); 我们看到中断名为__U1RXInterrupt和__U1TXInterrupt为串口1的收发中断函数名,我们知道c语言中编译器处理后会自动在函数名前加一个下划线,我们为中断处理函数命名_U1RXInterrupt和_U1TXInterrupt.。 查看数据手册,我看中断向量表存放在固定的地址。 IVT 位于程序存储器中,起始单元地址是 000004h。 IVT 包含 126 个矢量,这些矢量由 8 个不可屏蔽的陷阱向量和最多118 个中断源组成。 一般来说,每个中断源都有自己的中断矢量。 每个中断矢量都包含一个 24 位宽的地址。 每个

文档评论(0)

1亿VIP精品文档

相关文档