基于MSP430单片机的CPU卡模板程序(三)

来源:本站
导读:目前正在解读《基于MSP430单片机的CPU卡模板程序(三)》的相关信息,《基于MSP430单片机的CPU卡模板程序(三)》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《基于MSP430单片机的CPU卡模板程序(三)》的详细说明。
简介:继续前两篇内容,本篇主要讲基于MSP430单片机的CPU卡模板程序(三)。

;**************************************

1.;发送命令头5字节

;**************************************

SEND_COMMAND:

MOV.b@BX+,TRDATA//发送命令头5字节

CALL#SENDCHAR

bit#c,sr

Jnzsendcom_out

DEC.BRESETCNT

JNZSEND_COMMAND

CLRC

sendcom_out:

RET

;**********************************************************

2.;发送一个字节,C=0发送正确,C=1发送出错,容错次数为3次

;**********************************************************

SENDCHAR:

MOV.B#3,ERRCNT//错误次数为3次

schar1:

BIS.B#ICIO+ICRST,&PDIRA//将数据口设为输出口

BIS.B#SAMIO+SAMRST,&PDIRB

clr.bicflag1

BIT.B#ICSAM

JNZSCHAR_IC1

BIC.B#SAMIO,&POUTB//发送起始位

CALL#DELAY1ETU

BIS.B#SAMIO,&PDIRB

CALL#SENDONEbYTE

BIC.B#SAMIO,&PDIRB//转为接收态

CALL#DELAY05ETU

bit.b#samio,&pinb

JZSCHAR_ERR//若数据线为低,表出错

JMPSCHAR_OK

SCHAR_IC1:

BIC.B#ICIO,&POUTA

CALL#DELAY1ETU

BIS.B#ICIO,&PDIRA

CALL#SENDONEbYTE

BIC.B#ICIO,&PDIRA

CALL#DELAY05ETU

BIT.B#ICIO,&PINA

JZSCHAR_ERR

SCHAR_OK:

CALL#DELAY05ETU//一字节发送完毕

call#DELAY1ETU

CLRC

RET

SCHAR_ERR:

CALL#DELAY1ETU

BIS.B#ICIO,&PDIRA

BIS.B#SAMIO,&PDIRB

CALL#DELAY1ETU

DEC.BERRCNT

JNZSCHAR1

SETC

RET

;**************************************

3.;发送一字节:8位加校验位

;**************************************

SENDONEBYTE://发送一字节:8位加校验位

MOV.B#8,CNTREG

CLRC

BIT.B#ICSAM

JNZS1BYTE_IC//ICCARD

S1BYTE_ASAM:

RRA.BTRDATA

JCS1BYTE_C1//=1

BIC.B#SAMIO,&POUTB

JMPS1BYTE_NEXT

S1BYTE_C1:

BIS.B#SAMIO,&POUTB

XOR.B#80H,ICFLAG1//计算校验和

S1BYTE_NEXT:

CALL#DELAY1ETU

DEC.BCNTREG

JNZS1BYTE_ASAM

BIT.B#80H,ICFLAG1//发校验和

JNZS1BYTE_MXOR1//1

BIC.B#SAMIO,&POUTB

JMPS1BYTE_OUT

S1BYTE_MXOR1:

BIS.B#SAMIO,&POUTB

S1BYTE_OUT:

CALL#DELAY1ETU

BIC.B#SAMIO,&PDIRB

JMPS1BYTE_OUT2

S1BYTE_IC:

RRA.BTRDATA

JCS1BYTE_IC1//=1

BIC.B#ICIO,&POUTA

JMPS1BYTE_NEXTIC

S1BYTE_IC1:

BIS.B#ICIO,&POUTA

XOR.B#80H,ICFLAG1//计算校验和

S1BYTE_NEXTIC:

CALL#DELAY1ETU

DEC.BCNTREG

JNZS1BYTE_IC

BIT.B#80H,ICFLAG1

JNZS1BYTE_MXORIC1//1

BIC.B#ICIO,&POUTA

JMPS1BYTE_OUTIC

S1BYTE_MXORIC1:

BIS.B#ICIO,&POUTA

S1BYTE_OUTIC:

CALL#DELAY1ETU

BIC.B#ICIO,&PDIRA

S1BYTE_OUT2:

RET

;************************************************************

4.;复位应答,接收13个应答信号,存放在RSTDATABUF开始的区域

;************************************************************

CARDRESET:

clr.bicflag1

MOV.B#8,CNTREG;发送或接收的位数

CLR.BTRDATA;发送或接收的数据

MOV#RSTDATABUF,BX;复位信号存放区

MOV.B#13,RESETCNT;计数器

clr.b&poutb;

bis.b#sampower,&poutb;

bis.b#samio,&poutB;esam模块io口输出高

bic.b#samrst,&poutB;esam模块rst口输出低

bis.b#sampower+samio+samrst,&pdirb;

BIC.B#CARDPRO_ERR

call#delay1etu

bit.b#icsam//判是对IC卡还是对ESAM的复位

jzrst_sam

RST_IC://对IC卡复位

clr.b&poutA

bis.b#ICpower,&poutA

bis.b#ICio,&poutA

bic.b#ICrst,&poutA

bis.b#ICpower+ICio+ICrst,&pdirA

BIC.B#CARDPRO_ERR

call#delay1etu

mov.b#0fh,&scfi1//对时钟频率进行设置

bis.b#dcoplus,&053h

mov.b#(64-1),&scfqctl//MCLK=4.196MHZ

mov.b#40h,&scfi0

mov.b#02h,P1dir//使P1.1为时钟输出

mov.b#02h,p1sel

bic.b#ICpower,&poutA//上电

bis.b#ICpower,&pdirA

CALL#DELAY05ETU

bic.b#ICIO,&pdirA//把口线置为接收态

call#delay1etu

call#delay1etu

call#delay1etu

BIS.B#ICRST,&POUTA//把RST置高

;starttoreceivedata:400clk

call#delay1etu

JMPRST_A

rst_sam:

bic.b#sampower,&poutB

bis.b#sampower,&pdirB

mov.b#0fh,&scfi1

bis.b#dcoplus,&053h

mov.b#(64-1),&scfqctl//MCLK=4.196MHZ

mov.b#40h,&scfi0

mov.b#02h,P1dir

mov.b#02h,p1sel

CALL#DELAY05ETU

bic.b#samio,&pdirb

call#delay1etu

call#delay1etu

call#delay1etu

BIS.B#SAMRST,&POUTB

;starttoreceivedata:400clk

call#delay1etu

RST_A:

call#recchar//接收13个复位字符

bit.b#c,sr

jnzrst_err

mov.btrdata,0(bx)

incbx

dec.bresetcnt

jnzRST_A

ret

rst_err:

bis.b#CARDPRO_ERR//将错误标志置1

ret

提醒:《基于MSP430单片机的CPU卡模板程序(三)》最后刷新时间 2024-03-14 01:10:09,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《基于MSP430单片机的CPU卡模板程序(三)》该内容的真实性请自行鉴别。