摘要:具体介绍PIC单片机运用SPI办法与IC卡进行数据传输的原理和电路规划,以及运用USART办法与PC机进行串行异步通讯的作业原理;介绍 PIC单片机听SPI办法和USART办法的设置办法。 关键词:PIC单片机 IC卡读写器 SPI办法 USART办法 导言 本规划的首要意图是介绍IC卡的数据存储技能和IC卡的数据通讯,因此运用存储器卡。因为本规划中既可与IC卡进行串行同步通讯,又要与上位机进行中行异步通讯,因此需求挑选一种一起具有这两种通讯办法的单片机。因为PIC16F877不只具有本规划所需求的两种通讯办法,并且还具有运转速度快、低功耗、价格低一级长处,所以挑选PIC16F877单片机作为本规划的单片机。 图1是本规划的电路图,图中电源改换电路和发光二极管等指示电路没有画出。图中的二极管电路是单片机与IC卡通讯数据线的维护电路。当数据线上的电压为负电压时,与地相连的二极管导通;当数据线上的电压大于+5V时,与+5V相连的二极管导通,然后确保数据线上的电压在0V~+5V之间,维护单片机和IC 卡不受损坏。图中单片机的15脚和23脚别离与IC卡的输出引脚3和4相连。因为IC卡的输出电压为CMOS电平,而单片机能够正确的辨认IC卡的输出信号,需求加上拉电阻。 1 SPI作业办法 串行外围设备接口SPI(Serial Peripheral Interface)总线技能是Motrola公司推出的一种同步串行接口。SPI总线是一种三线同步总线,因其硬件才干很强,与SPI有关的软件就适当简略,使CPU有更多的时刻处理其它业务,因此得到广泛运用。 SPI形式答应8位数据同步发送和接纳,支撑SPI的一切四种办法。SPI形式传输数据需求四根信号线:串行数据输出(SDO)线、串行数据输入(SDI)线、串行时钟(SCK)和从挑选(SS)。其间,从挑选线只用于隶属形式。
1.1 SPI主形式 因为操控时钟SCK的输出,主形式能够在任何时候开端传输数据。主形式通过软件协议操控从形式的数据输出。 在主形式中,一旦SSPUF寄存器写入,数据就会发送或接纳。在接纳数据时,SSPSR寄存器依照时钟速率移位,一旦接纳到一个字节,数据就传输到 SSPBUF,一起中止标志位和状况标志方位位。 时钟的极性能够通过编程改动。在主形式中,时钟SCK的频率能够设置为:fosc/4(即Tcy)、fosc/16(即4Tcy)、fosc/64(即 16Tcy)和定时器2(Timer2)输出的二分频等四种。在芯片时钟为20MHz时,SCK的最大频率为5.0MHz。 在本规划中,运用的便是SPI主形式,由单片机操控时钟SCK的输出。当向IC卡中写数据时,随时能够发送数据;当读IC卡内的数据时,先要发送恣意一个数据(此刻IC卡不处于写入状况,不会接纳该数据), 给IC卡供给输出数据的时钟,然后再接纳IC卡宣布的数据。其时序如图2所示。(发送和接惦的数据均为6FH) 假如要接连发送数据,那么每次将数据送到SSPBUF寄存器后,都要判别是否现已发送完该数据,即判别PIR1寄存器的SSPIF位是否为1。假如 SSPIF位为1,则标明数据现已发送结束,能够持续发送下一个数据。但此刻还不能当即发送下一个数据,因为SSPIF位有必要在程序中由软件清零,只需将 SSPIF位软件清零后,才干持续发送下一个数据。 1.2 SPI从形式
在SPI从形式,数据的发送和接纳抢先SCK引脚上输入的外时钟脉冲,当最终一位被锁存后,中止标志位SSPIF(PIR1的D3)位。在休眠形式,从形式仍可发送和接纳数据,一旦接纳到数据,芯片就从休眠中唤醒。假如选用SS操控的从形式,当SS引脚接到VDD时,SPI形式复位;假如 彩CKE=1操控的从形式,有必要敞开SS引脚操控。 在本规划中,因为IC卡是存储器卡,不能供给时钟信号,因此不能选用从形式,只能选用主形式,由单片机操控时钟信号。 单片机的SPI办法初始化程序如下: MOVLW20H ;将20H送到累加器 MOVWF SSPCON ;将累加器中的数送到SSPCON寄存器 BSF STATUS,RP0 ;将定RAM区的第1页 BCF SSPSTAT,SMP ;将SSPSTAT寄存器的SMP方位0 BSF SSPSTAT,CKE ;将SSPSTAT寄存器的CLK方位1 BCF TRISC,3 ;将端口C的第3位设置为输出 BCF TRISC,5 ;将端口C的第5位设置为输出 其间,上述第1、2行程序是装备操控寄存器,将SPI办法装备为主控形式,时钟频率为单片机时钟频率的1/4,并将时钟的高电平设置为闲暇状况。第3行程序为换页指令,将指针转到第1页。因为PIC16F877单片机的数据存储器是分页的,而所要操作的寄存器在第1页,因此要用换页指令将指针到第1页。第 4、5行程序是装备状况寄存器,将SPI办法设置为数据输出时钟的中心采样,时钟SCK的上升沿触发。第6、7行程序则是将RC口的RC3和RC5设置为输出。 2 USART办法 通用同步异步接纳发送模块(USART)是两个串行通讯接口之一,USART又称为SCI(Serial Communication Interface)。USART能够设置为全双工异步串行通讯体系,这种办法能够与个人计算机PC或串行接口CRT等外围设备进行串行通讯:也能够设置为半双工异步串行通讯体系,与串行接口的A/D或D/A集成电路、串行EEPROM等器材衔接。USART是二线制串行通讯接口,它能够被界说如下三种作业办法:全双工异步办法、半双工同步主控办法、半双工同步从动办法。 为了把RC6和RC7别离设置成串行通讯接口的发送/时钟(TX/CK)线和接纳/数据(TX/DT)线,有必要首先把SPEN位(TCSTAT的RD7)和方向寄存器TRISC的D7:D6置1。 USART功用模块含有两个8位可读/写的状况/操控寄存器,它们是发送状况/操控寄存器TXSTA和接纳状况/操控寄存器TCSTA。
USART带有一个8位波特率发生器BRG(Baud Rato Generator),这个BRG支撑USART的同步和异步作业办法。用SPBRG寄存器操控一个独立的8位定时器的周期。在异步办法下,发送状况/操控寄存器TXSTA的BRGH位(即D2)也被用来操控波特率(在同步办法下疏忽BRGH位)。 向波特率寄存器SPBRG写入一个新的初值时,都会使BRG定时器复位清零,由此能够确保BRG不需求比及定时器溢出后就能够输出新的波特率。 对USART办法进行初始化的程序如下: BSF STATUS,RP0 ;将指针指向数据存储器的第1页 MOVLW 0x19 MOVWF SPBRG ;设置波特率为9600 BCF STATUS,RP0 ;将指针指向数据存储器的第0页 CLRF RCSTA ;将接纳操控和状况寄存器清零 BSF RCSTA,SPEN ;串口答应 CLRF PIR1 ;铲除中止标志 BSF STATUS,RP0 ;将指针指向数据存储器的第1页 CLRF TXSTA ;将发送操控和状况寄存器清零 BSF TXSTA,BRGH ;设置为异步、高速波特率 BSF TXSTA,TXEN ;答应发送 BCF STATUS,RP0 ;将指针指向数据存储器的第0页 BSF RCSTA,CREN ;答应接纳 初始化完成后,即可发送或接纳数据。在发送或接纳数据时,通过查询发送/接纳中止标志位即可判别是否发送完一个数据/接纳到一个数据。发送/接纳中止标地不需求也不有用软件复位。 在异步串行发送的过程中,只需TXREG寄存器为空,中止标志TXIF就置位。因此,TXIF为1并不是发送结束的标志,但仍能够用TXIF标志来判别。因此当TXREG为空时,将数据送入后,数据会保留在TXREG寄存器中,直到前一个数据从发送移位寄存器中移出,即前一个数据发送完。
3 IC卡 IC卡是%&&&&&%卡(Integrated Circuit Card)的简称,有些国家和地址称其为智能卡(Smart Card)、芯片卡(Chip Card)。世界规范化安排(ISO)在ISO7816规范中规则,IC卡是指在由聚氯乙烯(PVC)或聚氯乙烯酸脂(PVCA)资料制成的塑料卡内嵌入式处理器和存储器等IC芯片的数据卡。近年来,因为导半体技能的前进,集成化程度和存储器容量有了很大进步,并使CPU和存储器集成在一个芯片上,然后进步了数据的安全性。 在本规划中,IC卡选用的是AT45DB041B-SC芯片,该芯片的特色如一下: *单一的2.7V~3.6V电源; *串行接口结构; *页面编程操作,单一的循环重复编程(擦除和编程,2048页(每页264字节)主存; *两个264字节的SRAM数据缓存,答应在重编程非易失性存储器时接纳数据; *内置的编程和操控定时器; *低功耗,4mA有源读取电流,2μA CMOS备用电流; *15MHz的最大时钟频率; *串行外围接口办法(SPI)——形式0和3; *CMOS的TTL兼容的输入和输出; *5.0V可接受的输入,SI、SCK、CS(低电平有用)、RESET(低电平有用)。 在本规划的调试过程中,曾测试过IC卡的输入输出电平,成果证明这种IC卡的输入电平与TTL兼容,而输出电平与TTL不兼容。 4 IC卡的电源供给电路 在本规划中,因为IC卡的电源电压规模为+2.7~+3.6V,而PIC单片机需求的电源为+5V,并且稳压源供给的电压也是+5V,因此,要规划一个稳压模块,给IC卡供给+3V左右的电压。规划电路如图3所示。 该电路的首要元件为LM317芯片,它是三端可调集成稳压器,输出电压为1.25~37V规模内可调。当其Vin端的输入电压在2~40V规模内变化时,电路均能正常作业,输出端Vout和调整端ADJ间的电压等于基准电压1.25V。该芯片内的基电路的作业电流IREF很小,约为50μA,由一个恒流性很好的恒流源供给,所以它的巨细不受供电电压的影响,十分安稳。在图3中,B点为电压输出端,为IC卡供给电压。A点为操控端,与单片机的一个端口引脚相连,当该引脚为低电平时,三极管Q1不作业,B点输出电压约为3.15V;当该引脚为高电平时,三极管Q1作业,B点输出电压约为1.25V。在程序中查询IC卡插座中是否有IC卡,当有IC卡时,将A点所连的单片机引脚设置为低电平,然后为IC卡供给电源;当没有IC卡或对IC卡的操作结束时,将A点连的单片机引脚设置为高电平,然后不给IC卡供给电源。 IC卡的上电和下电程序如下。 IC卡上电子程序 IC卡下电子程序 POWERON POWEROOF BSF STATUS,RP0 BSFSTATUS,RP0 BCF TRISE,0 BCF TRISE,0 BCF RTISE,1 BCF TRISE,1 BCF STATUS,RP0 BCF STATUS,RP0 BCF PORTE,0 BSF PORTE,0 BCF PORTE,1 BSF PORTE,1 CALL DLYTIM CALL DLYTIM RETURN RETURN 在本规划中,单片机与IC卡通讯的主程序流程图如图4所示。 5 与PC机的通讯 在本规划中,有PIC单片机与PC机串行通讯的功用。因为本规划所用的单片机PIC16F877有USART办法,该办法可将C口的RC5和RC7设置成异步串行通讯形式,因此在本规划中,与PC机的通讯模块电路就比较简略。将单片机C口的RC6和RC7设置为异步串行通讯形式,通过MAX232A芯片进行电平转化后,将TTL电平转化为RS232电平,再与DB9接口相连,即可完成通讯。在PC机端,能够用VC等编程东西依据通讯协议编写软件来操控对 IC卡的读写操作。 6 定论 通过调试,本规划能够在脱离在线仿真器的情况下,上电后独立的运转程序,并能在PC机软件的操控下,完成对IC卡中恣意方位的读写,其间读写的开始地址、读写数据的个数以及数据内容能够在PC机端输入或挑选。 本规划已在实践运用中测试过,具有实用价值。因为本规划中所运用的PIC单片机的程序存储器较大(8KB),因此能够编写较大的程序,完成多合一该卡器并由PC机操控读写哪种芯片的%&&&&&%卡。别的,因为本规划所运用单片机的程序存储器是Flash存储器,因此能够方便地完成程序的下载和晋级。