社区
单片机/工控
帖子详情
求IC卡读写程序原代码!高分相赠
CrazyGentleman
2003-09-18 12:52:12
型号是SLE4428,C51程序!
wabshen@21cn.com
...全文
59
18
打赏
收藏
求IC卡读写程序原代码!高分相赠
型号是SLE4428,C51程序! wabshen@21cn.com
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
18 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
gidee
2004-01-10
打赏
举报
回复
学习,收藏
CrazyGentleman
2003-09-26
打赏
举报
回复
指正得很专业!,非常感谢!
其中(2),我想请教:
我现在有延时100us 的汇编代码,现在需要1ms、10us 的代码,是否可以写成如下格式:
PUBLIC DL100us
PUBLIC DL10us
PUBLIC DL1ms
Prog_seg SEGMENT CODE
RSEG Prog_seg
; 延时100us子程序:DL100us(时钟为6MHz,时钟周期为1/6us,)
; 24*3+12+(2*24*0x01+12+24)*0x05+24*4 = 600时钟周期
DL100us:
PUSH PSW ;24时钟周期
PUSH 07H ;24时钟周期
PUSH 06H ;24时钟周期
MOV R7,#05H ;12时钟周期
LOOP1:
MOV R6,#01H ;12时钟周期
LOOP2:
NOP ;12时钟周期
NOP ;12时钟周期
DJNZ R6,LOOP2 ;24时钟周期
DJNZ R7,LOOP1 ;24时钟周期
POP 06H ;24时钟周期
POP 07H ;24时钟周期
POP PSW ;24时钟周期
RET ;24时钟周期
DL10us:
…………
RET
DL1ms:
…………
RET
END
liangsiyuan
2003-09-26
打赏
举报
回复
你的代码我看了,很清晰,也很有条理,不错。
不过有写地方我认为应该修改一下,因为代码太占ROM空间了。而且效率很低。
比如:
(1)Temp_Order = Addr/256;
Temp_Order = Temp_Order << 1;
Temp_Order = Temp_Order << 1;
Temp_Order = Temp_Order << 1;
Temp_Order = Temp_Order << 1;
Temp_Order = Temp_Order << 1;
Temp_Order = Temp_Order << 1;
可改为:Temp_Order = (Addr/256)<<6;
(2)void DL10us(void)
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
return;
}
可改为汇编写,下面是430的汇编。
delay ;void delay(int count)
;R12 = int count
TST R12 ; in case of 0==R12
JZ delay_end
delay_dec
DEC R12
JNZ delay_dec
delay_end
RET
(3)下面这个全局变量改为局部变量
unsigned char Command_Entry[3] = {0x00,0x00,0x00};
(4)下面这个判断
if((Temp_Order&Command_Entry[j])==0)
改为:if(!(Temp_Order&Command_Entry[j]))
(5)Temp_Order = Temp_Order<<1;
改为:Temp_Order <<= 1;
Error_Counter_Byte = Error_Counter_Byte&temp;
改为:Error_Counter_Byte &= temp;
*注:所有这样的操作都改成我给你的例子这样。
(6)每个函数最后的return;都删除掉。
*********************************************************
可能还有一些问题存在,显得代码不是很专业。
个人认为,在开发驱动的时候最好是用汇编写,很节省空间,效率也很高
liangsiyuan
2003-09-26
打赏
举报
回复
理论上讲,你上面的程序就是100us的程序,而且应该很准确。但是你最好是用示波器看看波形。
(1)延时程序最好是用传递参数的方式。
比如:
void delay(unsigned short dLen)
{
while(--dLen);
}
(2)然后你可以定义一些宏作为参数。
比如:
#define DELAY_10_US xxxxH
#define DELAY_100_US xxxxH
#define DELAY_1_MS xxxxH
(3)最后你就可以调用函数来实现了。
比如:
delay(DELAY_10_US);//10us延时
delay(DELAY_100_US);//100us延时
delay(DELAY_1_MS);//1ms延时
shweng
2003-09-25
打赏
举报
回复
真是高手啊
CrazyGentleman
2003-09-25
打赏
举报
回复
up
liangsiyuan
2003-09-24
打赏
举报
回复
我没收到你的代码,再发一遍吧。
我明天有个“一级告警”要解决,可能要后天才能帮你看代码。
liangsiyuan
2003-09-24
打赏
举报
回复
我出差了几天,昨天刚刚回来,所以今天才把代码帖出来,不好意思啊
liangsiyuan
2003-09-24
打赏
举报
回复
上面的是SLE4442的读写程序,我调试过了,你按照SLE4428的手册再稍微改一下就OK了。
如果看汇编累的话,就给我发Email,我把C的代码发给你。
SLE4428的寻址是16位的,4442是8位的,这是修改的关键。
liangsiyuan
2003-09-24
打赏
举报
回复
SFR WDG=0xA6
CS EQU P2.1
mclk EQU P2.0
DIO EQU P2.2
ICLK EQU P3.4
IO EQU P3.7
IRST EQU P3.5
HDOG EQU P2.6
;************************************
;* S_IN
;************************************
S_IN:
MOV R6,#8
SETB IO
S_IN1:
CLR ICLK
LCALL DELAY
SETB ICLK
LCALL DELAY
MOV C,IO
RRC A
DJNZ R6,S_IN1
RET
;************************************
;* S_OUT
;************************************
S_OUT:
MOV R6,#8
CLR ICLK
SOUT1:
RRC A
MOV IO,C
SETB ICLK
LCALL DELAY
CLR ICLK
LCALL DELAY
DJNZ R6,SOUT1
RET
;************************************
;* S_START
;************************************
S_START:
SETB IO
LCALL DELAY
SETB ICLK
LCALL DELAY
CLR IO
LCALL DELAY
RET
;************************************
;* S_STOP
;************************************
S_STOP:
CLR ICLK
CLR IO
LCALL DELAY
SETB ICLK
LCALL DELAY
SETB IO
RET
;************************************
;* S_PCM
;************************************
S_PCM:
CLR ICLK
SETB IO
MOV R6,#20
S_PCM3:
MOV R7,#0
S_PCM2:
JB IO,S_PCM1
CLR ICLK
NOP
SETB ICLK
NOP
NOP
CLR ICLK
DJNZ R7,S_PCM2
DJNZ R6,S_PCM3
S_PCME:
CLR C
RET
S_PCM1:
SETB C
RET
;************************************
;* S_CMD
;* R2-S_CMD,R5-ADD,R4-data
;************************************
S_CMD:
LCALL S_START
MOV A,R2
LCALL S_OUT
MOV A,R5
LCALL S_OUT
MOV A,R4
LCALL S_OUT
LCALL S_STOP
RET
;************************************
;* RESET42
;************************************
PUBLIC RESET42
reset42p SEGMENT CODE
RSEG reset42p
RESET42:
SETB IO
CLR ICLK
CLR IRST
LCALL DELAY
SETB IRST
LCALL DELAY
SETB ICLK
LCALL DELAY
CLR ICLK
LCALL DELAY
CLR IRST
LCALL DELAY
LCALL S_IN
LCALL S_IN
LCALL S_IN
LCALL S_IN
CJNE A,#91H,RESET421
CLR ICLK
NOP
NOP
SETB ICLK
NOP
CLR ICLK
NOP
SETB C
RET
RESET421:
CLR C
RET
;************************************
;* write42
;* R5-ICADD,R7-DATA,R3-length
;************************************
PUBLIC _write42
rps SEGMENT CODE
RSEG rPS
_write42:
LCALL RESET42
JNC S_W1
MOV A,R7
MOV R1,A
S_W2:
MOV R2,#38H
MOV A,@R1
MOV R4,A
LCALL S_CMD
LCALL S_PCM
JNC S_W1
INC R1
INC R5
DJNZ R3,S_W2
SETB C
S_W1:
RET
;************************************
;* read42
;* R0-ICADD,R1-DATA_ADD,R7-length
;************************************
PUBLIC _read42
sps SEGMENT CODE
RSEG sPS
_read42:
LCALL RESET42
JnC RENDG
MOV R2,#30H
MOV A,R7
MOV R1,A
LCALL S_CMD
SREAD1:
LCALL S_IN
MOV @R1,A
INC R1
DJNZ R3,SREAD1
LCALL RESET42
SETB C
RENDG:
RET
;************************************
;* comp42
;* R0-ICADD,R1-DATA_ADD,R7-length
;************************************
PUBLIC _comp42
s1ps SEGMENT CODE
RSEG s1PS
_comp42:
MOV A,R7
MOV R0,A
LCALL RESET42
JNC S_CMPE
MOV R2,#31H
MOV R5,#0
LCALL S_CMD
LCALL S_IN
anl A,#7
CJNE A,#7,S_CMPe
CLR ACC.0
MOV B,A
LCALL RESET42
JNC S_CMPE
MOV R2,#39h
MOV R5,#0
MOV R4,#6
LCALL S_CMD
LCALL S_PCM
JNC S_CMPE
MOV R3,#3
MOV R2,#33h
MOV R5,#1
S_CMP2:
MOV A,@R0
INC R0
MOV R4,A
LCALL S_CMD
LCALL S_PCM
JNC S_CMPE
INC R5
DJNZ R3,S_CMP2
S_CMP12:
MOV R2,#39h
MOV R5,#0
MOV R4,#0ffh
LCALL S_CMD
LCALL S_PCM
JNC S_CMPE
MOV R2,#31h
MOV R5,#0
LCALL S_CMD
LCALL S_IN
ANL A,#7
CJNE A,#7,S_CMPE
LCALL RESET42
SETB C
RET
S_CMPE:
CLR C
RET
end.
CrazyGentleman
2003-09-24
打赏
举报
回复
我把C代码发到你信箱了!
麻烦看看,还有什么不妥当的地方?/
我现在正在调试,没再遇到什么大的问题,就是不知道有什么BUG。
谢谢你的帮助。
过2天,我要结贴了!
88LYFLY
2003-09-23
打赏
举报
回复
给我看看可以吗
我也想了解一下
TLL_kdtx@163.com
liangsiyuan
2003-09-21
打赏
举报
回复
做好了,改天发给你
CrazyGentleman
2003-09-20
打赏
举报
回复
waiting..........
jack2004
2003-09-19
打赏
举报
回复
有資料嗎?給我一份,現正沒啥事一做.
fhqitxss@yahoo.com.cn
liangsiyuan
2003-09-19
打赏
举报
回复
我需要的信息包括:
1、I/O定义
2、SLE4428手册(中英文均可)
3、您所使用的单片机型号及手册(中英文均可)
注:如果不忙的话,一天内可帮您解决问题(联系方式见楼上)
liangsiyuan
2003-09-19
打赏
举报
回复
我写过SLE4442的,如果您有调试环境的话,把手册发给我,我帮你。
email:xinxin_lsy@163.com
phone:0755-26711778
sxoldbig
2003-09-18
打赏
举报
回复
不懂,帮你顶一下!
单片机技术实验指导书.doc
- **接触式
IC卡
单元:** 支持接触式
IC卡
读写
。 - **蜂鸣器驱动单元:** 用于声音提示。 - **光电耦合器与继电器单元:** 实现信号隔离和控制外部设备。 - **单脉冲产生单元:** 用于产生脉冲信号。 - **单总线(DS...
EDA实验平台介绍~
17. **SD卡模块**:支持SD卡
读写
操作,适用于便携式存储需
求
。 18. **8 路开关输入**:提供8个开关输入端口,可用于检测开关状态。 19. **VGA模块**:支持标准的VGA视频输出,适用于显示高清图像或视频。 20. **按钮...
MST705显示驱动源
代码
全面剖析
驱动
程序
是计算机硬件与操作系统之间的桥梁,它允许操作系统通过标准化的API来控制硬件设备。在没有驱动
程序
的情况下,操作系统无法识别或利用硬件的全部功能。驱动
程序
的重要性体现在其为硬件设备提供了一个指令集...
R3MEMID:专业ATI显卡显存IC故障测试与定位工具
R3MEMID是一款专业的显存IC测试定位工具,它通过一系列的诊断
程序
和算法来分析ATI显卡显存IC的工作状态。该工具能够提供深度的显存性能分析报告,并准确指出可能存在的问题或故障点。它的设计兼顾了易用性和功能性,...
四层电梯的PLC控制
四层电梯的PLC控制 摘要 在现代社会和经济活动中,计算机技术、自动控制技术和电力电子技术得到... 本设计针对我国电梯业的现状,将可编
程序
控制器(PLC)应用于四层电梯进行逻辑控制,通过合理的选择和设计,不但
单片机/工控
27,510
社区成员
28,796
社区内容
发帖
与我相关
我的任务
单片机/工控
硬件/嵌入开发 单片机/工控
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章