首页
技术博客
PHP教程
数据库技术
前端开发
HTML5
Nginx
php论坛
新用户注册
|
会员登录
PHP教程
技术博客
编程问答
PNG素材
编程语言
前端技术
Android
PHP教程
HTML5教程
数据库
Linux技术
Nginx技术
PHP安全
WebSerer
职场攻略
JavaScript
开放平台
业界资讯
大话程序猿
登录
极速注册
取消
热门标签 | HotTags
case
erlang
object
flutter
instance
io
vbscript
email
filter
stream
node.js
md5
const
heatmap
client
web
integer
actionscrip
nodejs
buffer
heap
metadata
cookie
perl
config
regex
bit
datetime
fetch
scala
uri
header
input
tags
int
hash
process
string
rsa
main
substring
plugins
dockerfile
callback
httpclient
require
command
include
php5
list
php7
runtime
import
python
emoji
hashcode
python3
php
audio
bash
sum
typescript
merge
java
cmd
dll
settings
match
express
chat
cpython
uml
triggers
go
golang
utf-8
replace
数组
tree
当前位置:
开发笔记
>
编程语言
> 正文
msp430——软件模拟II2C实例
作者: | 来源:互联网 | 2023-10-10 17:59
运行代码复制代码#include#defineSDABIT1#defineSCLBIT2#defineSEG_A0xA00x0200---0x027F
运行代码
#include
#define SDA BIT1
#define SCL BIT2
#define SEG_A 0xA0 //0x0200---0x027F
#define SEG_B 0xB0 //0x0280---0x02FF
#define SEG_C 0xC0 //0x0300---0x037F
//0x0380---0x0400
__no_init char wokao@0x243;
//=============================
char *send_ptr;
char DEVICE_ADR=0;
char WORD_ADR=0;
char REC_DATA=0;
char START_flag = 0;
char STOP_flag = 0;
char PreState = 0;
char NowState = 0;
//*********************函数声明*************************************
void ACK(void);
//****************************************************************
void main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
//======================MCLK=16MHz=====================================
DCOCTL = CALDCO_16MHZ;
BCSCTL1 = CALBC1_16MHZ; //MCLK=DCO=16MHz
P3DIR &= ~(SDA+SCL);
while(1)
{
NN=10;
PreState = READ_SDA;
while(READ_SCL && NN--)
{
NowState = READ_SDA;
if(PreState && !NowState)
{
START_flag = 1;
_DINT();
}
if(!PreState && NowState)
{
STOP_flag = 1;
_EINT();
}
PreState = NowState;
if(START_flag)
{
START_flag=0;
while(READ_SCL); //START时的SCL高电平状态就等待
for(gg=8;gg>0;gg--) //接收器件地址
{
while(!READ_SCL); //SCL低电平状态就等待
DEVICE_ADR<<&#61;1;
if(READ_SDA) //数据的第一个CLK高电平来临
DEVICE_ADR |&#61; 0x01;
while(READ_SCL); //SCL高电平状态就等待
}
ACK(); //对设备地址ACK应答信
//-----------以上收到了设备地址&#xff0c;并知晓主机要对从机进行读还是写操作---
for(gg&#61;8;gg>0;gg--) //接收内存单元地址
{
while(!READ_SCL);
WORD_ADR<<&#61;1;
if(READ_SDA)
WORD_ADR |&#61; 0x01;
while(READ_SCL);
}
//-----------以上就已经接收到内存单元地址------------
ACK(); //对内存单元ACK应答信号
if(DEVICE_ADR & 0x01) //从机发数据给主机 R/W&#61;1
{
if(DEVICE_ADR&#61;&#61;SEG_A&#43;0x01)
{
send_ptr &#61;(char*)(0x0200 &#43; WORD_ADR);
}
else if(DEVICE_ADR&#61;&#61;SEG_B&#43;0x01)
{
send_ptr &#61;(char*)(0x0280 &#43; WORD_ADR);
}
else if(DEVICE_ADR&#61;&#61;SEG_C&#43;0x01)
{
send_ptr &#61;(char*)(0x0300 &#43; WORD_ADR);
}
//--------以上是判断出为主机读从机&#xff0c;要把要读的地址单元赋给指针---
for(gg&#61;8;gg>0;gg--)
{
while(!READ_SCL);
if( *send_ptr & 0x80)
_NOP();
else
{
P3DIR |&#61; SDA; //输出0
}
while(READ_SCL); //SCL为1&#xff0c;就保持SDA输出不变
P3DIR &&#61; ~SDA; //SCL为0&#xff0c;就把SDA从新切换到接收状态
*send_ptr <<&#61;1;
}
ACK(); //从机数据发送完毕&#xff0c;应答信号
_NOP();
//------------------以上是从机发数据给主机-----------------
}
else //主机写从机 R/W&#61;0
{
for(gg&#61;8;gg>0;gg--) //接收主机要写到该器件内存单元的数据
{
while(!READ_SCL);
REC_DATA <<&#61;1;
if(READ_SDA)
REC_DATA |&#61; 0x01;
while(READ_SCL);
}
if(DEVICE_ADR&#61;&#61;SEG_A)
{
send_ptr &#61;(char*)(0x0200 &#43; WORD_ADR);
*send_ptr &#61; REC_DATA;
}
else if(DEVICE_ADR&#61;&#61;SEG_B)
{
send_ptr &#61;(char*)(0x0280 &#43; WORD_ADR);
*send_ptr &#61; REC_DATA;
}
else if(DEVICE_ADR&#61;&#61;SEG_C)
{
send_ptr &#61;(char*)(0x0300 &#43; WORD_ADR);
*send_ptr &#61; REC_DATA;
}
ACK();
_NOP();
while(!READ_SCL);
}
}// if(START_flag)
}//while(NN--)
_EINT();
_NOP();
}//while(1)
}
//****************************************************
void ACK(void)
{
// while(READ_SCL);
while(!READ_SCL);
P3DIR |&#61; SDA; //第9个CLK变高的情况下&#xff0c;SDA输出0
while(READ_SCL);
P3DIR &&#61; ~SDA; //第9个CLK变低的情况下&#xff0c;SDA输出1
}
include
bit
char
main
int
写下你的评论吧 !
吐个槽吧,看都看了
会员登录
|
用户注册
推荐阅读
bit
Open judge C16H: Magical Balls 快速幂+逆元问题解析
本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ...
[详细]
蜡笔小新 2023-12-14 12:03:27
io
c语言\n不换行,c语言printf不换行
本文目录一览:1、C语言不换行输入2、c语言的 ...
[详细]
蜡笔小新 2023-12-14 11:05:35
io
油田地块的划分和计数方法
本文介绍了一种划分和计数油田地块的方法。根据给定的条件,通过遍历和DFS算法,将符合条件的地块标记为不符合条件的地块,并进行计数。同时,还介绍了如何判断点是否在给定范围内的方法。 ...
[详细]
蜡笔小新 2023-12-14 09:18:20
bit
P1651 塔 (动态规划) 的最大高度计算方法
本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ...
[详细]
蜡笔小新 2023-12-13 19:52:19
client
使用多进程实现TCP服务端的优势和注意事项
本文介绍了为什么要使用多进程处理TCP服务端,多进程的好处包括可靠性高和处理大量数据时速度快。然而,多进程不能共享进程空间,因此有一些变量不能共享。文章还提供了使用多进程实现TCP服务端的代码,并对代码进行了详细注释。 ...
[详细]
蜡笔小新 2023-12-13 18:25:30
io
二叉树层序创建问题的解决方法
本文介绍了解决二叉树层序创建问题的方法。通过使用队列结构体和二叉树结构体,实现了入队和出队操作,并提供了判断队列是否为空的函数。详细介绍了解决该问题的步骤和流程。 ...
[详细]
蜡笔小新 2023-12-13 18:20:50
io
C函数ispunct()的用法及示例代码
本文介绍了C函数ispunct()的用法及示例代码。ispunct()函数用于检查传递的字符是否是标点符号,如果是标点符号则返回非零值,否则返回零。示例代码演示了如何使用ispunct()函数来判断字符是否为标点符号。 ...
[详细]
蜡笔小新 2023-12-13 18:13:34
io
动态规划算法的基本步骤及最长递增子序列问题详解
本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ...
[详细]
蜡笔小新 2023-12-13 15:38:19
const
Linux环境变量函数getenv、putenv、setenv和unsetenv详解
本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ...
[详细]
蜡笔小新 2023-12-13 12:01:03
io
PE总结9PE文件结构之 解析导出表
本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ...
[详细]
蜡笔小新 2023-12-13 11:47:24
bit
伊振华作品 | 沈阳市智慧城市运行管理中心的设计与建设
本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ...
[详细]
蜡笔小新 2023-12-14 16:35:39
io
HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ...
[详细]
蜡笔小新 2023-12-14 15:08:18
io
mcs51单片机定时器计数器应用教程(基于c语言)
本文介绍了基于c语言的mcs51单片机定时器计数器的应用教程,包括定时器的设置和计数方法,以及中断函数的使用。同时介绍了定时器应用的举例,包括定时器中断函数的编写和频率值的计算方法。主函数中设置了T0模式和T1计数的初值,并开启了T0和T1的中断,最后启动了CPU中断。 ...
[详细]
蜡笔小新 2023-12-14 12:15:04
case
如何在有序字符序列中插入新字符并保持有序
本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ...
[详细]
蜡笔小新 2023-12-14 11:16:33
case
汉诺塔迭代算法的实现及移动顺序打印
本文介绍了汉诺塔问题的迭代算法实现,通过递归的方式将盘子从一个地方搬到另一个地方,并打印出移动的顺序。详细介绍了算法的思路和步骤,以及示例代码的运行结果。 ...
[详细]
蜡笔小新 2023-12-13 12:59:05
Tags | 热门标签
case
erlang
object
flutter
instance
io
vbscript
email
filter
stream
node.js
md5
const
heatmap
client
web
integer
actionscrip
nodejs
buffer
heap
metadata
cookie
perl
config
regex
bit
datetime
fetch
scala
RankList | 热门文章
1
Servlet 架构
2
开发笔记:C# 线程中操作窗体控件
3
标准C++时间日期函数
4
网易Java高级开发工程师
5
java线程参数怎么互不干扰_多线程到底该设置多少个线程?如何设置才能不影响系统性能?...
6
pythonpygame贪吃蛇代码_pygame写贪吃蛇
7
webpack原理篇(五十五):webpack流程:准备阶段
8
ue4sky时间_UE4虚幻引擎4 truesky UE4真实天空插件
9
c++ 调用 powershell_PowerShell、CMD和Windows Terminal的美化配置方法
10
ES6 Proxy handler的apply方法,MDN中写的可以拦截proxy(...args)是指
11
每次点击取消按钮时,搜索栏会向下跳一行 - Search bar jumps down one row every time cancel button is tapped
12
人工智能影响职业选择 创造力对找工作极为重要
13
scala的模式匹配是什么
14
npm发包问题如何剔除其他依赖
15
现代操作系统笔记——第一章引论
PHP1.CN | 中国最专业的PHP中文社区 |
DevBox开发工具箱
|
json解析格式化
|
PHP资讯
|
PHP教程
|
数据库技术
|
服务器技术
|
前端开发技术
|
PHP框架
|
开发工具
|
在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved |
京公网安备 11010802041100号
|
京ICP备19059560号-4
| PHP1.CN 第一PHP社区 版权所有