社区
单片机/工控
帖子详情
求IC卡读写程序原代码!高分相赠
CrazyGentleman
2003-09-18 12:52:12
型号是SLE4428,C51程序!
wabshen@21cn.com
...全文
51
18
打赏
收藏
求IC卡读写程序原代码!高分相赠
型号是SLE4428,C51程序! wabshen@21cn.com
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
不懂,帮你顶一下!
[应用方案]如何入门新塘N76E003单片机
今年真是变幻莫测的一年,芯片的真是流水账的价格,一天一个样,翻翻自己的抽屉,一堆的板卡,不知玩弄哪一个,一直想玩弄一下新塘的片子,可惜论坛没怎么做过新塘的开发板评测活动(也有可能做过,可能我只是一个新人),看到很多项目都用N76E003这个片子,今天就来研究一下,给大家一个提示哈,别指望我写太深的东西!本人使用过赛元的MCU,赛元的调试器使用的是STM32作为主控,有兴趣的可以去研究一下,同样是调试器,Nu-Link-Me也大同小异,只要拿到固件,参考其
原
理图设计,自己就可以做出一个Nu-Link-Me。.
江科大STM32 下
7、ADC数模转换器 8、DMA直接存储器存取 9、USART串口 9-2 串口发送+接受 9-3 串口收发HEX数据包 I2C SPI协议 10.1 SPI简介 W25Q64简介 10.3 SPI软件
读写
W25Q64 10.4 SPI硬件
读写
W25Q64 BKP、RTC 11.0 Unix时间戳 11.1
读写
备份寄存器BKP 11.2 RTC实时时钟 十二、PWR 12.1 PWR简介 12.2 修改主频 12.3 数据收发+睡眠模式 12.4 停止模式 12.5 待机模式: 十三、看门狗WDG 13.
实战篇3:一切皆对象,文件目录体系(节点树)
AOS与阿里名称冲突,现改为OACS;面向对象汇编语言OASM(Object assembly language),又带一点点C风格,改名为OACS、即是带一点C风格的面向对象汇编语言系统(Object assembly language C system)。一切皆对象,相比unix/linux的一切皆文件,会显得范围更广一些;许多内核对象,如内存对象、CPU对象、IPC对象、线程对象、等等,是没有文件i节点的。c语言功能也强大,但个人认为、想用好并不容易;这段时间,看了不少嵌入式操作系统及相关的源
代码
;给
【雕爷学编程】Arduino传感器与执行器一百九十三种实验清单
实验一百八十四: Goouuu-ESP-32F果云开发板,支持WiFi/蓝牙,板载1.44寸TFT可选配096寸OLED,2路触摸按键,支持TF卡
读写
,自带1W扬声器,可以播放PCM音乐。实验一百七十二:MX1508 四通道双路有刷直流马达驱动模块 2路直流电机驱动模块 双H桥步进电机 正反转PWM调速。实验一百九十:8X16点阵模块 MAX7219点阵控制芯片 2位点阵二合一显示屏模块 单片机控制驱动LED模块。
什么是BIOS?
什么是BIOS?w//计算机用户在使用计算机的过程中,都会接触到BIOS,它在计算机系统中起着非常重要的作用。nZD?BIOS,完整地说应该是ROM-BIOS,是只读存储器基本输入/输出系统的简写,它实际上是被固化到计算机中的一组
程序
,为计算机提供最低级的、最直接的硬件控制。准确地说,BIOS是硬件与软件
程序
之间的一个“转换器”或者说是接口(虽然它本身也只是一个
程序
),负责解决硬件的即时需
求
,并按
单片机/工控
27,374
社区成员
28,770
社区内容
发帖
与我相关
我的任务
单片机/工控
硬件/嵌入开发 单片机/工控
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章