📄 max517c3.lst
字号:
C51 COMPILER V8.02 MAX517C3 08/11/2007 18:03:47 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE MAX517C3
OBJECT MODULE PLACED IN MAX517C3.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE MAX517C3.C BROWSE DEBUG OBJECTEXTEND
line level source
1 /*************************************************************/
2 /* 这是MAX517 C51语言程序-不是调用汇编的,文件名为MAX517C3.C */
3 /* 功能:本程序是实现MAX517芯片的D/A转换。程序中转换的十六 */
4 /* 进制值依次为10H,20H,40H,80H,0FFH,00H, OUT脚输出转换后 */
5 /* 的模拟信号,它既可用万用表的直流电压档测试,也可用示波器 */
6 /* 的探头点在此处观察。 */
7 /**************************************************************/
8 #include <reg52.h> // 引用标准库的头文件
9 #include <intrins.h>
10
11 #define uchar unsigned char
12 #define uint unsigned int
13
14 sbit SDA = P1^0; // MAX517串行数据
15 sbit SCL = P1^1; // MAX517串行时钟
16 uchar i;
17
18 void delay(uint t) // 延时t毫秒
19 {
20 1 uint i;
21 1 while(t--)
22 1 {
23 2 for (i=0;i<125;i++) // 对于12M时钟,约延时1ms
24 2 {}
25 2 }
26 1 }
27 void start(void) // 起始条件子程序
28 {
29 1 SDA = 1;
30 1 SCL = 1;
31 1 _nop_();
32 1 SDA = 0;
33 1 _nop_();
34 1 }
35 void stop(void) // 停止条件子程序
36 {
37 1 SDA = 0;
38 1 SCL = 1;
39 1 _nop_();
40 1 SDA = 1;
41 1 _nop_();
42 1 }
43 void ack(void) // 应答子程序
44 {
45 1 SDA = 0;
46 1 _nop_();
47 1 SCL = 1;
48 1 _nop_();
49 1 SCL = 0;
50 1 }
51 void send(uchar ch) // 发送数据子程序,ch为要发送的数据
52 {
53 1 uchar BitCounter = 8; //位数控制
54 1 uchar tmp; //中间变量控制
55 1 do
C51 COMPILER V8.02 MAX517C3 08/11/2007 18:03:47 PAGE 2
56 1 {
57 2 tmp = ch;
58 2 SCL = 0;
59 2 _nop_();
60 2 if ((tmp&0x80)==0x80)//如果最高位是1
61 2 SDA = 1;
62 2 else
63 2 SDA = 0;
64 2 SCL = 1;
65 2 tmp = ch<<1; //左移
66 2 ch = tmp;
67 2 BitCounter--;
68 2 }
69 1 while(BitCounter);
70 1 SCL = 0;
71 1 }
72 void DACOut(uchar ch) // 串行DA转换子程序
73 {
74 1 start(); // 发送启动信号
75 1 send(0x58); // 发送地址字节
76 1 ack();
77 1 send(0x00); // 发送命令字节
78 1 ack();
79 1 send(ch); // 发送数据字节
80 1 ack();
81 1 stop(); // 结束一次转换
82 1 }
83 void main(void) // 主程序
84 {
85 1 SP=0xcf;
86 1 delay(2000);
87 1 i=0x10; // 对数字0x10作数模转换
88 1 DACOut(i);
89 1 delay(2000); // 延时约2s
90 1 i=0x20; // 对数字0x20作数模转换
91 1 DACOut(i);
92 1 delay(2000); // 延时约2s
93 1 i=0x40;
94 1 DACOut(i);
95 1 delay(2000);
96 1 i=0x80;
97 1 DACOut(i);
98 1 delay(2000);
99 1 i=0xff;
100 1 DACOut(i);
101 1 delay(2000);
102 1 i=0x00;
103 1 DACOut(i);
104 1 delay(2000);
105 1 while(1)
106 1 { // 对数字0~255进行数模转换
107 2 for (i=0;i<=255;i++)
108 2 {
109 3 delay(1000); // 间隔约1s
110 3 DACOut(i); // 调用串行DA转换子程序
111 3 }
112 2 delay(2000); // 延时2s
113 2 }
114 1 }
115
116
117
C51 COMPILER V8.02 MAX517C3 08/11/2007 18:03:47 PAGE 3
118
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 195 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -