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

TLC5620芯片DA转换源代码(C程序和汇编两种)

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

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

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

×
分享一个TLC5620芯片DA转换的源代码,C程序和汇编两种

C程序代码:
  1. /*------------------------------------------------------------------------------
  2. 调用方式:void da5620(uchar da) ﹫2001/03/23
  3. 函数说明:往固定端口送da值完成DA输出,该函数没有输出端口选择功能,尽管5620有4个
  4. 输出口。
  5. 改变程序中的command可以改变默认端口。
  6. ------------------------------------------------------------------------------*/
  7. #include"reg51.h"
  8. #include<intrins.h>
  9. #define uchar unsigned char
  10. #define uint unsigned int
  11. #define nop _nop_()
  12. sbit SPI_CLK=P1^2;
  13. sbit SPI_DATA=P1^1;
  14. sbit CS_DA=P1^3;

  15. void del(uint v)
  16. {
  17. while(v!=0)v--;
  18. }

  19. void da5620(uchar da)
  20. {
  21. uchar i;
  22. ACC=01100000; //d7=a1;d6=a0;d6=rng;(while rng=1 2倍out);(a0,a1是ch选择)
  23. CS_DA=1;
  24. for (i=3;i>0;i--) //写D/A命令字(通道数的选择)
  25. {
  26. ACC+=ACC; //CY=ACC。7
  27. SPI_DATA=CY;
  28. SPI_CLK=1;
  29. nop;
  30. nop;
  31. nop;
  32. nop;
  33. SPI_CLK=0;
  34. }

  35. ACC=da; //写D/A数据
  36. for (i=8;i>0;i--)
  37. {
  38. ACC+=ACC; //CY=ACC。7
  39. SPI_DATA=CY;
  40. SPI_CLK=1;
  41. nop;
  42. nop;
  43. nop;
  44. nop;
  45. SPI_CLK=0;
  46. }

  47. CS_DA=0;
  48. nop;
  49. nop;
  50. CS_DA=1;
  51. }

  52. void main(void) //主程序处理
  53. {
  54. uchar j;
  55. while(1)
  56. {
  57. for(j=0xff;j>=0x01;j--)
  58. {da5620(j);del(2000);}
  59. for(j=0x00;j<=0xfe;j++)
  60. {da5620(j);del(2000);}
  61. }
  62. }
复制代码


以下是汇编源代码
  1. SPI_DATA BIT P1.1
  2. SPI_CLK BIT P1.2
  3. CS_DA BIT P1.3
  4. ORG 0000H
  5. AJMP START
  6. ORG 0010H

  7. TLC5620: ;;D/A 转换主程序
  8. CLR A
  9. SETB CS_DA
  10. MOV R6,#43H ;;写D/A命令字(通道数的选择)
  11. COMMAND: ADD A,ACC
  12. MOV SPI_DATA,C
  13. SETB SPI_CLK
  14. NOP
  15. NOP
  16. NOP
  17. NOP
  18. CLR SPI_CLK
  19. DJNZ R6,COMMAND
  20. MOV A,R7
  21. MOV R6,#08H
  22. DATE : ADD A,ACC ;;写D/A数据
  23. MOV SPI_DATA,C
  24. SETB SPI_CLK
  25. NOP
  26. NOP
  27. NOP
  28. NOP
  29. CLR SPI_CLK
  30. DJNZ R6,DATE
  31. CLR CS_DA
  32. NOP
  33. NOP
  34. SETB CS_DA
  35. RET
  36. DEL: ;;延时程序
  37. MOV R1,#01H
  38. DEL0:
  39. MOV R2,#60H
  40. DEL1:
  41. MOV R3,#0FFH
  42. DJNZ R3,$
  43. DJNZ R2,DEL1
  44. DJNZ R1,DEL0
  45. RET

  46. START:
  47. MOV R7,#0FFH ;;数据减一处理程序,并进行转换(FF--80)
  48. LOOP1:
  49. ACALL TLC5620
  50. ACALL DEL
  51. DEC R7
  52. CJNE R7,#80H,LOOP1

  53. MOV R7,#80H ;;数据加一处理程序,并进行转换(80--FF)
  54. LOOP2:
  55. ACALL TLC5620
  56. ACALL DEL
  57. INC R7
  58. CJNE R7,#0FFH,LOOP2
  59. AJMP START
  60. END
复制代码
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

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

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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