1. 目的
□电路上:学会如何将发光二极管与PIC单片机的I/O口连接。
□ 程序上:学会使用PIC单片机的基本指令,以及编写简易的延时程序。
2. 材料
实验所需材料在表5-1中详细列出来。
表5-1 材料
| 项 | 品 名 | 规 格 | 数量 |
| 1. 2. 3. 4. 5. 6. |
万用接线板(面包板) PIC16C57 石英振荡器 电容 发光二极管(LED) 排阻 |
17×17cm EPROM型(注) 8MHz 20pF 红色 330Ω,9Pins |
1 1 1 2 8 1 |
54与57间在编写程序上的注意:
54复位后所执行的第一个程序地址在1FFH,而57则是在7FFH。另外57比54多出一个端口C可以使用,因端口C的特性与端口B雷同,所以以往对F6的指令操作(如MOVF6.0、TRIS6等……),都可以改成MOVF7.0、TRIS7,所得到的执行效果是一样的。
3. 电路

图5-1 原理图
5. 步骤
1. 将PIC16C57单片机插到万用接线板(以后简称面包板)上。(注1)
2. 石英振荡器有两个引脚(两个一样长),把其中的一个引脚跟PIC16C57(以后简称PIC)的OSC1脚连接,然后剩另一个引脚,把它跟PIC的OSC2脚连接。(注2)
3. PIC的OSC1、OSC2已经分别接上石英振荡器的两个脚了,这时候把两个电容再分别跟OSC1、OSC2引脚接上,两个电容的另一个脚,就一起接到PIC的VSS脚上。(注3)
4. 将PIC的VDD、MCLR引脚接上电源的+5V端,而VSS则接电源的+0V端。(注4)
5. 发光二极管(以后简称LED)有长短两个引脚,其中有一个较短的,和PIC的RB0引脚连接,接着第二个LED与PIC的RB1引脚连接,往下的第三个、第四个也一样,最后一个直接到RB7,刚好用完八个LED。(注5)
6. 排阻外观上有个白点(印上去的,左右两边找找看),白点下方的那个引脚,把它跟PIC的VSS接在一块,其他的引脚分别一对一的跟LED的较长引脚连接。(注6)
7. 把PIC从面包板上拨出,用烧写器将写好的程序烧入芯片内,完成后再插回板子上的原位。
8. 打开电源,大功告成!
∴注 1:尽量将芯片安插在板上的中间位置,以后扩充电路才方便。
∴注 2:其实石英振荡器引脚没有极性,颠倒接也一样可以操作。
∴注 3:有些电容有极性之分(引脚较长的接电位较高的一端,或包装上有标"+"符号),例如电解电容就是。
∴注 4:PIC单片机内置POWER ON RESET的电路,只要直接连VDD即可。
∴注 5:事实上LED也可以反过来接,只是亮灭状态相反而已。
∴注 6:排阻引脚数目,按规格需求有不同数目及不同阻值的产品,但依旧会有白点(共地点)存在。
6. 流程图

7. 程序
□标号说明
·RESET:起始程序的进入点
·REDO:循环执行的进入点
·DLY:延时子程序的进入点
·DLY1:延时重复递减判断的进入点(1)
·DLY2:延时重复递减判断的进入点(2)
□寄存器使用配置情况
·F6:输出LED亮灭用
·F8:延时程序的外部循环计数器
·F9:延时程序的内部循环计数器

8. 说明
(1) 使芯片复位后可以跳至主程序开始处。
(2) 将主程序安排在100H处开始。
(3) 使端口B成为输出状态。
(4) 输出7FH的值呈现在端口B上(使一个LED点亮,其他皆灭)。
(5) 将C标志位设为"1",因接下来的旋转操作(列10的RRF)只允许一个LED亮,若不将其设为"1",则会造成同时有两个灯亮,虽然不是说不行,但这种操作不是我们要的。
(6) 调用延时子程序。
(7) 将RB寄存器的值(含C标志位)作向右旋转的操作。
(8) 跳至原先调用延时子程序的地址,再次进入延进程序。
(9) 延时程序,利用两个寄存器递减的原理作为循环,直到两个寄存器都递减为零时才跳出循环。
(10)通知编译器,编译操作到此结束。
9. 除错
如果没有见到预期的操作,或根本没运行的话,请试着思考下列问题:
1、 程序是否有写错的地方?(包含输入错误、编译错误、烧写错误)
□输入错误:程序输入时打错,例如把MOVLW打成MOVWF。
□编译错误:编译时有错误信息,但一时忽略而未作修正。
□烧写错误:烧写时忘了擦除以前烧入的内容,或下载成ACSII码,而不是政党的二进制码。
2、 LED的长短引脚是否弄错?(必须八个长脚全在一边,若有一个不是,就会造成若干不亮的现象。
3、 电容忘了接地、排阻的白点忘了接地,诸如此类……。