完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
你好,求一份CS1237的外部中断的51程序,目前我使用查询方式读取数据都是非常稳定的。现在用中断触发方式,触发后开启标志位并关闭外部中断,等读取数据完毕后再开启外部中断!使用按键,按一次读一次或者只是单次读取数据都没问题。但是连续读取用逻辑分析,发现第一次正确读取完毕后在几毫秒过后,DOUT被拉下20多微秒造成误触发…调试很久没找到问题所在。所以求一份例程学习! 邮箱79866579@qq.com
|
|
相关推荐
2个回答
|
|
您好!根据您的描述,您需要一个51单片机的CS1237外部中断程序。以下是一个简单的示例程序,您可以根据自己的需求进行修改。
```c #include #define CS1237_SCL P3_6 #define CS1237_SDA P3_7 #define CS1237_INT P3_5 unsigned char dataFlag = 0; void delay(unsigned int ms) { unsigned int i, j; for (i = ms; i > 0; i--) for (j = 110; j > 0; j--); } void CS1237_Init() { CS1237_SCL = 1; CS1237_SDA = 1; IT0 = 1; // 外部中断0为下降沿触发 EX0 = 1; // 开启外部中断0 EA = 1; // 开启总中断 } void CS1237_Start() { CS1237_SDA = 1; CS1237_SCL = 1; CS1237_SDA = 0; CS1237_SCL = 0; } void CS1237_Stop() { CS1237_SCL = 0; CS1237_SDA = 0; CS1237_SCL = 1; CS1237_SDA = 1; } unsigned char CS1237_ReadByte() { unsigned char i, data = 0; for (i = 0; i < 8; i++) { data <<= 1; CS1237_SCL = 1; if (CS1237_SDA) { data |= 0x01; } CS1237_SCL = 0; } return data; } void CS1237_ReadData() { dataFlag = 1; EX0 = 0; // 关闭外部中断0 unsigned char data = CS1237_ReadByte(); // 处理读取到的数据 // ... EX0 = 1; // 重新开启外部中断0 } void main() { CS1237_Init(); while (1) { if (dataFlag) { CS1237_ReadData(); dataFlag = 0; } } } void Ext0_ISR() interrupt 0 { // 外部中断0处理函数 CS1237_ReadData(); } ``` 这个示例程序实现了CS1237的初始化、开始信号、停止信号、读取字节以及外部中断处理。当外部中断触发时,程序会调用`CS1237_ReadData()`函数读取数据,并在读取完成后重新开启外部中断。 请注意,这个示例程序可能需要根据您的硬件连接和需求进行调整。希望这个示例对您有所帮助!如果您需要进一步的帮助,请随时告诉我。 |
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
3 浏览 0 评论
使用CS1232 采集一个小信号,信号有可能是正,也可能是负 ,是不知道怎么回事情?
818 浏览 0 评论
1188 浏览 0 评论
870 浏览 0 评论
811 浏览 1 评论
6163浏览 44评论
5019浏览 34评论
3388浏览 9评论
1807浏览 9评论
1312浏览 8评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-21 18:56 , Processed in 0.598949 second(s), Total 82, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号