找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

分享一下93C46的读写实验程序

[复制链接]
admin 发表于 2010-5-13 22:07:41 | 显示全部楼层 |阅读模式

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
93C46的读写实验程序,汇编编写的。

  1. ;*******************************************************************
  2. ;* 当选择8 位结构时93C46 有7 条10 位的指令
  3. ;* 指令、地址和写入的数据在时钟信号SK 的上升沿时由DI 引脚输入
  4. ;* DO 引脚除了从器件读取据或在进行了写操作后查询准备/繁忙ready/busy 的器件工作状态外平常是高阻态的
  5. ;******************************************************************************************
  6. ;程序首先从89S51的 ADDR,WDM 读出欲写入93C46的地址和数据,然后再把写入的数据读出来
  7. ;存放在 RDM ,再把ADDR , RDM 同过四位数码管显示出来.

  8. ;-------------端口和存储单元的定义---------------
  9. CS EQU P3.5 ;片选端
  10. SK EQU P2.6 ;模拟时钟信号输出端
  11. DI EQU P2.5 ;串行数据输出端
  12. DO EQU P2.4 ;串行数据输入端

  13. WDM EQU 51H ;欲写入数据存储单元
  14. RDM EQU 50H ;读出存放于 89S51 RAM 的存储单元
  15. ADDR EQU 42H ;欲写入93C46的地址
  16. ;------------------------------------------------
  17. ORG 0000H
  18. LJMP MAIN
  19. ORG 0100H ;主程序
  20. MAIN:
  21. MOV ADDR,#20H ;欲写入的地址设置(可根据需要自行修改)
  22. MOV WDM,#0ffH ;要写入的数据(可根据需要自行修改)
  23. LCALL EWEN46 ;调用写允许子程序,93C46每次上电后在进行写操作前都要先写允许
  24. LCALL WRITE ;调用写入子程序
  25. LCALL READ ;调用读子程序
  26. SJMP $

  27. ;*********************************************************************
  28. ;********************** 各功能子程序 *****************************
  29. ;*********************************************************************
  30. ;----------------------------------------------------
  31. ;发送高电平 1
  32. ;-----------------------------------------------------
  33. HIGH46:
  34. SETB DI
  35. SETB SK
  36. NOP
  37. CLR SK
  38. NOP
  39. RET

  40. ;-----------------------------------------------------
  41. ;发送低电平 0
  42. ;-----------------------------------------------------
  43. LOW46:
  44. CLR DI
  45. SETB SK
  46. NOP
  47. CLR SK
  48. NOP
  49. RET

  50. ;-------------------------------------------
  51. ;---------------------延时-------------------
  52. DL2MS:
  53. MOV R4,#8;
  54. DD3:
  55. MOV R5,#124
  56. DJNZ R5,$
  57. DJNZ R4,DD3
  58. RET
  59. ;--------------------------------------------

  60. ;-----------------------------------------------------
  61. ;-------------------写操作允许子程序--------------------
  62. ;-----------------------------------------------------
  63. EWEN46: ; ( 10011***** )
  64. SETB CS ;启动93C46
  65. NOP
  66. LCALL HIGH46 ;1
  67. LCALL LOW46 ;0
  68. LCALL LOW46 ;0
  69. LCALL HIGH46 ;1
  70. LCALL HIGH46 ;1
  71. LCALL LOW46 ;0
  72. LCALL LOW46 ;0
  73. LCALL LOW46 ;0
  74. LCALL LOW46 ;0
  75. LCALL LOW46 ;0
  76. NOP
  77. CLR CS ;93C46 进入休眠,降低功耗
  78. RET

  79. ;-----------------------------------------------------------------
  80. ;------------向指定的地址中写入一个字节数据(八位)子程序---------
  81. ;-----------------------------------------------------------------
  82. WRITE: ;101

  83. SETB CS ;启动93C46
  84. NOP
  85. MOV A,ADDR ;把欲写入的数据的地址
  86. LCALL HIGH46 ;1
  87. LCALL LOW46 ;0
  88. LCALL HIGH46 ;1

  89. WR_ADDR: ;欲写入地址的设置,93C46的地址为 7 位
  90. MOV C,ACC.6
  91. MOV DI,C
  92. SETB SK
  93. NOP
  94. CLR SK
  95. NOP
  96. MOV C,ACC.5
  97. MOV DI,C
  98. SETB SK
  99. NOP
  100. CLR SK
  101. NOP
  102. MOV C,ACC.4
  103. MOV DI,C
  104. SETB SK
  105. NOP
  106. CLR SK
  107. NOP
  108. MOV C,ACC.3
  109. MOV DI,C
  110. SETB SK
  111. NOP
  112. CLR SK
  113. NOP
  114. MOV C,ACC.2
  115. MOV DI,C
  116. SETB SK
  117. NOP
  118. CLR SK
  119. NOP
  120. MOV C,ACC.1
  121. MOV DI,C
  122. SETB SK
  123. NOP
  124. CLR SK
  125. NOP
  126. MOV C,ACC.0
  127. MOV DI,C
  128. SETB SK
  129. NOP
  130. CLR SK
  131. NOP

  132. WR_DAT: ;写入一个字节数据(8位)
  133. MOV A,WDM
  134. MOV C,ACC.7
  135. MOV DI,C
  136. SETB SK
  137. NOP
  138. CLR SK
  139. NOP
  140. MOV C,ACC.6
  141. MOV DI,C
  142. SETB SK
  143. NOP
  144. CLR SK
  145. NOP
  146. MOV C,ACC.5
  147. MOV DI,C
  148. SETB SK
  149. NOP
  150. CLR SK
  151. NOP
  152. MOV C,ACC.4
  153. MOV DI,C
  154. SETB SK
  155. NOP
  156. CLR SK
  157. NOP
  158. MOV C,ACC.3
  159. MOV DI,C
  160. SETB SK
  161. NOP
  162. CLR SK
  163. NOP
  164. MOV C,ACC.2
  165. MOV DI,C
  166. SETB SK
  167. NOP
  168. CLR SK
  169. NOP
  170. MOV C,ACC.1
  171. MOV DI,C
  172. SETB SK
  173. NOP
  174. CLR SK
  175. NOP
  176. MOV C,ACC.0
  177. MOV DI,C
  178. SETB SK
  179. NOP
  180. CLR SK
  181. NOP
  182. LCALL DL2MS ;调用延时,等待DO空闲!!!
  183. LCALL DL2MS
  184. LCALL DL2MS

  185. LLK: CLR CS ;93C46 进入休眠,降低功耗
  186. RET
  187. ;-----------------------------------------------------------------

  188. ;-----------------------------------------------------
  189. ;----------从指定的地址中读出一个字节数据(八位)子程序
  190. ;-----------------------------------------------------
  191. READ: ;110
  192. SETB CS ;启动93C46
  193. NOP
  194. MOV A,ADDR ;把欲读出的数据的地址送给A
  195. LCALL HIGH46
  196. LCALL HIGH46
  197. CLR DI
  198. SETB SK
  199. NOP
  200. CLR SK
  201. NOP

  202. RD_ADDR: ;读出地址设置(7位地址)
  203. MOV C,ACC.6
  204. MOV DI,C
  205. SETB SK
  206. NOP
  207. CLR SK
  208. NOP
  209. MOV C,ACC.5
  210. MOV DI,C
  211. SETB SK
  212. NOP
  213. CLR SK
  214. NOP
  215. MOV C,ACC.4
  216. MOV DI,C
  217. SETB SK
  218. NOP
  219. CLR SK
  220. NOP
  221. MOV C,ACC.3
  222. MOV DI,C
  223. SETB SK
  224. NOP
  225. CLR SK
  226. NOP
  227. MOV C,ACC.2
  228. MOV DI,C
  229. SETB SK
  230. NOP
  231. CLR SK
  232. NOP
  233. MOV C,ACC.1
  234. MOV DI,C
  235. SETB SK
  236. NOP
  237. CLR SK
  238. NOP
  239. MOV C,ACC.0
  240. MOV DI,C
  241. SETB SK
  242. NOP
  243. CLR SK
  244. NOP
  245. RD_DAT: ;读出一个字节的数据
  246. SETB SK
  247. NOP
  248. MOV C,DO
  249. MOV ACC.7,C
  250. CLR SK
  251. NOP

  252. SETB SK
  253. NOP
  254. MOV C,DO
  255. MOV ACC.6,C
  256. CLR SK
  257. NOP
  258. SETB SK
  259. NOP
  260. MOV C,DO
  261. MOV ACC.5,C
  262. CLR SK
  263. NOP
  264. SETB SK
  265. NOP
  266. MOV C,DO
  267. MOV ACC.4,C
  268. CLR SK
  269. NOP
  270. SETB SK
  271. NOP
  272. MOV C,DO
  273. MOV ACC.3,C
  274. CLR SK
  275. NOP
  276. SETB SK
  277. NOP
  278. MOV C,DO
  279. MOV ACC.2,C
  280. CLR SK
  281. NOP
  282. SETB SK
  283. NOP
  284. MOV C,DO
  285. MOV ACC.1,C
  286. CLR SK
  287. NOP
  288. SETB SK
  289. NOP
  290. MOV C,DO
  291. MOV ACC.0,C
  292. CLR SK
  293. NOP

  294. MOV RDM,A ;保存读出的数据到 RDM(22H)
  295. CLR CS ;93C46 进入休眠,降低功耗
  296. RET

  297. ;---------------------------------------------------------------------------
  298. ;-----------------------------------------------------
  299. ;-----------擦除所有单元子程序--------------------------
  300. ;-----------------------------------------------------
  301. EARASE:
  302. SETB CS ;启动93C46
  303. NOP
  304. LCALL HIGH46
  305. LCALL LOW46
  306. CLR DI
  307. SETB SK
  308. NOP
  309. CLR SK
  310. NOP
  311. SETB DI
  312. SETB SK
  313. NOP
  314. CLR SK
  315. NOP
  316. CLR DI
  317. SETB SK
  318. NOP
  319. CLR SK
  320. NOP
  321. CLR DI
  322. SETB SK
  323. NOP
  324. CLR SK
  325. NOP
  326. CLR DI
  327. SETB SK
  328. NOP
  329. CLR SK
  330. NOP
  331. CLR DI
  332. SETB SK
  333. NOP
  334. CLR SK
  335. NOP
  336. CLR DI
  337. SETB SK
  338. NOP
  339. CLR SK
  340. NOP
  341. SETB DI
  342. SETB SK
  343. NOP
  344. CLR SK
  345. NOP
  346. LCALL DL2MS ;调用延时,等待DO空闲!!!
  347. LCALL DL2MS
  348. LCALL DL2MS

  349. LLL: CLR CS ;93C46 进入休眠,降低功耗
  350. RET
  351. ;----------------------------------------------------------------------
  352. END
复制代码
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-11-23 08:37 , Processed in 0.054675 second(s), 9 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表