成为订阅者(免费)

加入29,000名其他订阅者以获得用户销售折扣和 其他免费资源。
:
:
大学教师'担心 - 您的邮件地址完全是 安全的。我保证使用它 只要 to send you MicroZine.

后退 12F675教程索引 下一个

12F675教程3:PIC串口

在这里,您可以了解如何添加PIC序列 端口电路到12F675微控制器教程电路(您可以使用它 任何其他图片设备,甚至是一个16F84,因为它使用软件实现 传输USART的一部分)。



跳到 柔软的USART. Transmit.
跳到   无焊 breadboard.
跳到 电路 Diagram.
跳到 软件

跳到 I / O使用 summary.
跳到 设置Osccal。
跳到 恢复丢失 calibration.

12F675没有内置的USART,您可以用于PIC序列 端口使您必须使用您可以从此页面下载的软件USART。

添加到电路的PIC串行端口连接可为您提供太多范围 更有趣的项目,您可以从ADC(输入)收集数据或 比较器或外部红外接收器模块等传输到A PC.

本教程涵盖创建USART的软件发射器(TX)部分 因为这是USART最有用的部分,你不't really need the 接收机,除非您要通过串行终端控制微控制器 such as Tera Term.  

注意:前两个教程页面 使用微控制器的间接涵盖最重要的工作。输入 and output.  Here's a summary of
I / O. 端口使用:



侧边栏

I / O端口使用摘要 港口  登记 :Trisio - 港口方向 register.

您可以重置位(低)以将端口引脚定义为 outputs.
您可以设置位(高)以将端口引脚定义为 inputs.

港口 register : GPIO - 输入/输出寄存器。

您写入此寄存器以设置输出 pins high or low.
你从这个寄存器中读到以阅读 当前值输入引脚。

所有这些行动都被使用在了 以前的两个教程页面和使用位值的所有工作:

trisio = 0x01;设置三件的第0位
所有剩下的零。
trisio = 0x04; 设置三件的第2位 所有剩下的零。
gpio = 0x01;设置位0  GPIO. 所有剩下的零。
GPIO.  = 0x04; 设置位2  GPIO. 所有剩下的零。

注意:在其他 PIC设备端口按字母顺序标记,它们不使用GPIO名称 相反,他们使用文本'PORT'。所以第一个端口被标记为porta下一个 PortB等。相应的端口方向寄存器是TRISA和TRISB。你 可以用它们与GPIO的方式完全相同 TRISIO.



pic 串行端口:软件TX part

代码 简化了USART的TX部分,因为它会生成10位串行数据 with no parity bit.

TX软件的基本PIC串行端口配置
:

每秒比特(波特) 2400
比特数 8
平价 没有任何
停止位 1
流量控制 没有任何


注意:审查RS232 PIC串行端口的方式 works click 这里 .  


由于每个位需要1/2400秒,因此传输数字的总时间是 4.16ms.  

注意:比特时间赢了't be exact as the PIC芯片在4MHz处运行,但它足以让台式使用足够好。

电路

该电路使用标准MAX232级转换器芯片,但您可以使用 一个SP202CP,它具有相同的别针(并且更便宜!)并让您使用 100NF电容器代替电解质。你也可以使用 USB至RS232或USB到序列 Digital 转换器和这些你不'甚至需要MAX232级别 转换器一切都在5V(或3V3)。

将接地连接并如图所示发送输出到串行端口连接器 从它到PC的串行电缆's ready to go.

用于设置TERA术语单击 这里 .

无焊 breadboard

添加MAX232芯片和电容器。

12F675串行端口插件

了解用于创建的工具 this diagram.

电路原理图

再说一张照片 serial port 电路在原理图上更易于看。

 pic 软串口电路图

12F675 pinouts

 
12F675引脚出局
其他意见:

 pic 12F675 PIC微控制器微控制器  pic  12F675微控制器

软件

源代码文件 :
获取文件 软件项目文件和C源代码 点击这里 .

pic 串行端口操作

代码闪烁3次LED然后重复序列的消息 port.

以下代码是PIC串口发送器的一部分:


// ////// //////////////////////////////////////////////////////////////////////////// //////////////////////
空白 _soft_usart_write(无符号 短的 chr) {
无符号 短的 mask=1,i;
无符号 txdata;

   txdata = chr << 1;
   txdata &= ~0x0001; // START bit (=0).

   // 10输出位
   为了 (i=0;i<9;i++) { // lsb 1st 8 bits
      if (mask & txdata) {
         asm {CLRW}
         SU_set; // 输出 low for logic 1
      } 别的 {
         SU_res; // 输出 high for logic 0
         asm {CLRW}
      }
      mask <<=1;
      delay_us(395); // 2400. 模拟以校准环路。
   }

   SU_set; // 停止位
   delay_us(417); // 2400
}

传输的字符将左侧移动到数据变量中 这是一个串行移位寄存器。  

使用'data'以这种方式,让例程在不恒定的时间内评估 必须检查索引,以便更高(更关键) 速度效果更好。

停止位(第10位)是输出集高电平的延迟。

笔记: 您需要校准循环 如果更改波特率,请从su_set到下一个su_set或su_res的定时。

注意:使用硬编码的优点 时间是常规只占用大约90个字。

pic 串口:Osccal

该项目 依赖振荡器的准确性,以准确地产生位定时 对于USART和此,您需要设置OSCCAL值。 

如果你不'T需要一个准确的时钟,那么部分仍将在没有 使用OCScal值 - 它只是不准确的。

笔记: 工厂设置的 振荡器是1%的,足够好。所以,如果你没有覆盖它 (容易完成)然后不要't change it.

如何设置OCScal值

OCSCal价值 位于正常闪存编程存储空间中的内存结束时 - 这是一个问题,因为它可能很容易被意外覆盖。 mplab x保护此 内存位置所以它 尝试 不要覆盖它。不可避免地 虽然,如果编程动作被中断,那么该值可能会变成 腐败了。在这种情况下,您需要能够对其进行编程,这是 super difficult!

你可以 使用以下代码创建一个简单的汇编文件:

Org 0x3ff

Retlw xx; xx应该是您的Osccal的价值

......或使用 来自C项目的现有十六进制输出文件。

笔记: 它不值得尝试将该值代码为C源,因为它将使用a 非标准编程方法。

或者 下载WinPic800(在线查看下载它)并将设备设置为12F675, 加载十六进制文件并转到WinPic800中的内存位置并输入 最后位置位置34后跟您之前的Cal值 存储。保存文件。

使用MPLAB X to program the OSCCAL value

这适用于12F675和12F629

注意:如果您丢失了值,请参阅下面的部分。

  1. 将CAL值设置为十六进制文件(如上)。
  2. 使用设备创建预先构建的项目(12F675)。
  3. 在MPLAB X选择菜单文件 - >Project Properties.
  4. 点击程序员(我是pickit3)。
  5. 在顶部下拉框中选择:程序选项。
  6. 勾选标记的框"程序校准内存".
  7. 现在像往常一样编程设备。
  8. 读回十六进制数据(使用MPLAB X上传)
  9. 然后查看程序内存菜单:窗口 - >Pic Memory Views-->Program Memory.
  10. 滚动到底部并检查最后一个位置的Cal值。
  11. 现在回到项目选项并关闭"Program calibration memory"现在将受到保护(直到您再次丢失!)。 

重新检查它是否有效

您可以通过重新构建原始六角文件来检查它(所以 手动插入Cal值丢失)。将此新的十六进制重新编程到PIC中。 然后上传十六进制数据。查看内存如上所述并滚动到底部 - 新的 计算值将在那里。

Osccal设置

当您写入时,此寄存器会更改振荡频率

最大 frequency 0xFF
中间 frequency 0x80
最低限度 frequency 0x00

只使用六位以校准位,因此必须是值 与4不同,改变到下一个Osccal设置。值32,33,34和35 将提供相同的频率设置。

Microchip校准12F675微控制器并放置校准值 在地址0x3FF。这是一个Retlw指令,它在调用时返回值 这是Osccal寄存器中使用的值。

重要的

您必须编写和使用例程来设置寄存器OSCAL 存储的值:它不是为您自动完成的!

注意:您必须使用以下内容 assembler code:
 
数据表的代码建议您使用将校准值设置为 OSCCAL register is :

BSF状态,RP0 ; 银行1
致电0x3FF. ;获得CAL值
MOVWF OSCCAL. ; 校准
BCF状态,RP0 ; 银行0.

这一切都是 调用包含Retlw值的位置,然后返回 校准值。此汇编程序代码已打包到 get_set_osc_cal()例程,并为您执行Osccal设置。

笔记: 如果存储在位置0x3FF处的值为零,则振荡器可能无法工作 -don'T如果CAL值已损坏,则调用此函数。

恢复丢失的校准

如果你松开校准值,那么你'LL需要重新校准 - 最好的方法是使用输出引脚(FOSC / 4)设置内部时钟 芯片设置,因此您将在时钟出销钉上寻找1MHz。  

使用频率计数器来测量输出(您可以找到一个项目 site 这里 )。更改Osccal值,直到 你发现最接近1MHz的人。

要将值恢复到12F675使用ICPROG并将十六进制代码RETLW 地址0x3FF的指令。指令的第一个字节是0x34 第二个是返回的值,以便为0x20的校准值返回 put:

         0x3420在地址0x3FF

重新编程芯片。

注意:看看 提示存储 calibration value 所以你永远不会忘记它或再次松散。

后退 12F675教程索引 下一个

新的! Comments

让你说到你刚刚阅读的东西!留下下面的框中的评论。




隐私政策 | 接触 | 关于我

网站地图 | 使用条款


 ezoic. 报告此广告

访问我们的Facebook页面:

    点击这里



最近的文章

  1. 如何使用ADS1115

    使用ADS1115精度16位ADC进行教程进行低功耗。

    阅读更多

  2. arduino. 模拟输出...易模拟输出生成

    arduino. 模拟输出:如何创建最精确的PWM模拟输出以及如何创建模拟PWM正弦波。

    阅读更多

  3. 数号和等效的快速宏。加快代码!

    了解DigitalWrite()的工作原理......现在使用17倍宏宏!

    阅读更多

  4. TCS230颜色传感芯片:如何运作以及如何使用它。

    如何使用TCS230(/ TCS3200)彩色检测器芯片并轻松将其添加到您的任何项目中。

    阅读更多

  5. 如何使用ADXL345进行运动感测等。

    使用ADXL345 Acellerometer,您可以检测到16G!您还可以了解如何使用它来点击检测等。

    阅读更多

  6. HMC5883L 3轴数字MAGENTOMTER如何运作

    HMC5883L - 如何制作数字罗盘,了解HMC5883L和QMC5883L之间的差异以及它们是否兼容。

    阅读更多



读者 Comments

"I wanted to thank
你这么好
对于所有信息
你已经提供了
你的网站's

高超 极好的 ."

- 逃亡Potthath.

"This site really is
最好的和我最喜欢的。
我发现这里有很多很有用
项目和提示。"

- 米兰

Bursach.<at>gmail.com<

"Awesome site,
非常,非常容易和好
导航!"


-
Matt_tr. <at>
wolf359.cjb.net.


学习微控制器

"Interested in
微控制器?"

注册
免费7天指南:

自由 GUIDE : CLICK HERE


"I am a newbie to PIC
我想说
 how great your
网站一直在为我。"


- 戴夫

de_scott.<at>bellsouth.net

"Your site is a great
和完美的工作。
恭喜。"


- SURESH.

IntegratedInfosys.<at>
Yahoo.com.

"I couldn't find the correct
要定义的词语
你的网页。

非常有用,揭开,
诚实明确。

非常感谢
你的时间和作品。
问候。 "


- Anon.

回到顶部