当前位置: 首页 > news >正文

外国做挂的网站是多少wordpress 中文转英文js

外国做挂的网站是多少,wordpress 中文转英文js,广州网站制作网页,工信部icp备案系统嵌入式开发平台#xff1a;mini2440 DS18B20 所用GPIO#xff1a;S3C2410_GPF(3) 一、DS18B20 时序分析 DS18B20的一线工作协议流程是#xff1a;初始化→ROM操作指令→存储器操作指令→数据传输#xff0c;其工作时序包括#xff1a;初始化时序、写时序、读时序。 1、初… 嵌入式开发平台mini2440 DS18B20 所用GPIOS3C2410_GPF(3) 一、DS18B20 时序分析 DS18B20的一线工作协议流程是初始化→ROM操作指令→存储器操作指令→数据传输其工作时序包括初始化时序、写时序、读时序。 1、初始化时序 主机首先发出一个480-960微秒的低电平脉冲然后释放总线变为高电平并在随后的480微秒时间内对总线进行检测如果有低电平出现说明总线上有器件已做出应答若无低电平出现一直都是高电平说明总线上无器件应答。 作为从器件的DS18B20在一上电后就一直在检测总线上是否有480-960微秒的低电平出现如果有在总线转为高电平后等待15-60微秒后将总线电平拉低60-240微秒做出响应存在脉冲告诉主机本器件已做好准备若没有检测到就一直在检测等待。 [cpp] view plaincopy static int ds18b20_init(void)     {         int retval  0;              s3c2410_gpio_cfgpin(DQ, CFG_OUT);         s3c2410_gpio_pullup(DQ, 0);              s3c2410_gpio_setpin(DQ, 1);         udelay(2);         s3c2410_gpio_setpin(DQ, 0); // 拉低ds18b20总线复位ds18b20          udelay(500);                // 保持复位电平500us               s3c2410_gpio_setpin(DQ, 1); // 释放ds18b20总线          udelay(60);              // 若复位成功ds18b20发出存在脉冲低电平持续60~240us          s3c2410_gpio_cfgpin(DQ, CFG_IN);         retval  s3c2410_gpio_getpin(DQ);              udelay(500);         s3c2410_gpio_cfgpin(DQ, CFG_OUT);         s3c2410_gpio_pullup(DQ, 0);         s3c2410_gpio_setpin(DQ, 1); // 释放总线               return retval;     }     2、写时序写周期最少为60微秒最长不超过120微秒写周期一开始作为主机先把总线拉低1微秒表示写周期开始随后若主机想写0则继续拉低电平最少60微秒直至写周期结束然后释放总线为高电平若主机想写1在一开始拉低总线电平1微秒后就释放总线为高电平一直到写周期结束。 而作为从机的DS18B20则在检测到总线被拉低后等待15微秒然后从15μs到45μs开始对总线采样在采样期内总线为高电平则为1若采样期内总线为低电平则为0。 [cpp] view plaincopy static void write_byte(unsigned char data)     {         int i  0;              s3c2410_gpio_cfgpin(DQ, CFG_OUT);         s3c2410_gpio_pullup(DQ, 1);              for (i  0; i  8; i)         {             // 总线从高拉至低电平时就产生写时隙              s3c2410_gpio_setpin(DQ, 1);             udelay(2);             s3c2410_gpio_setpin(DQ, 0);             s3c2410_gpio_setpin(DQ, data  0x01);             udelay(60);             data  1;         }         s3c2410_gpio_setpin(DQ, 1); // 重新释放ds18b20总线      }     3、读时序对于读数据操作时序也分为读0时序和读1时序两个过程读时序是从主机把单总线拉低之后在1微秒之后就得释放单总线为高电平以让DS18B20把数据传输到单总线上。DS18B20在检测到总线被拉低1微秒后便开始送出数据若是要送出0就把总线拉为低电平直到读周期结束若要送出1则释放总线为高电平。 主机在一开始拉低总线1微秒后释放总线然后在包括前面的拉低总线电平1微秒在内的15微秒时间内完成对总线进行采样检测采样期内总线为低电平则确认为0采样期内总线为高电平则确认为1完成一个读时序过程至少需要60μs才能完成。 [cpp] view plaincopy static unsigned char read_byte(void)     {         int i;         unsigned char data  0;       // 总线从高拉至低只需维持低电平17ts再把总线拉高就产生读时隙          s3c2410_gpio_cfgpin(DQ, CFG_OUT);         s3c2410_gpio_pullup(DQ, 0);            for (i  0; i  8; i)         {                        s3c2410_gpio_setpin(DQ, 1);             udelay(2);             s3c2410_gpio_setpin(DQ, 0);             udelay(2);             s3c2410_gpio_setpin(DQ, 1);             udelay(8);             data  1;             s3c2410_gpio_cfgpin(DQ, CFG_IN);             if (s3c2410_gpio_getpin(DQ))                 data | 0x80;             udelay(50);         }         s3c2410_gpio_cfgpin(DQ, CFG_OUT);         s3c2410_gpio_pullup(DQ, 0);         s3c2410_gpio_setpin(DQ, 1); // 释放ds18b20总线          return data;     }     二、操作方法 DS18B20单线通信功能是分时完成的有严格的时序概念如果出现序列混乱1-WIRE器件将不影响主机因此读写时序很重要。系统对DS18B20的各种操作必须按协议进行根据DS18B20的协议规定微控制器控制DS18B20完成温度的转换必须经过以下4个步骤 1每次读写前对DS18B20进行复位初始化。复位要求主CPU将数据线下拉500μs然后释放DS18B20收到信号后等待16μs-60μs左右然后发出60μs-240μs的存在低脉冲主CPU收到此信号后表示复位成功。 2发送一条ROM指令 3发送存储器指令 1、让DS18B20进行一次温度转换的具体操作如下 a -- 主机先做个复位操作 b -- 主机再写跳过ROM的操作CCH命令 c -- 然后主机接着写转换温度的操作指令后面释放总线至少1秒让DS18B20完成转换操作。需要注意的是每个命令字节在写的时候都是低字节先写例如CCH的二进制为11001100在写到总线上时要从低位开始写写的顺序是“0、0、1、1、0、0、1、1”整个操作的总线状态如图所。 2、读取RAM的温度数据同样这个操作也要按照三个步骤 a -- 主机发出复位操作并接受DS18B20的应答存在脉冲 b -- 主机发出跳过对ROM操作的命令CCH; c -- 主机发出读取RAM的命令BEH随后主机依次读取DS18B20发出的从第0-第8共九个字节的数据。如果只想读取温度数据那在读完第0和第1个数据后就不再理会后面DS18B20发出的数据即可同样读取数据也是低位在前整个操作的总线状态如图所示。 三、具体驱动编写 1、ds18b20_drv.c [cpp] view plaincopy #include linux/init.h      #include linux/module.h      #include linux/delay.h      #include linux/kernel.h      #include linux/moduleparam.h      #include linux/init.h      #include linux/types.h      #include linux/fs.h      #include mach/regs-gpio.h      #include mach/hardware.h      #include linux/cdev.h      #include asm/uaccess.h      #include linux/errno.h      #include linux/gpio.h      #include linux/device.h           /* 相关引脚定义,方便以后移植 */     #define DQ         S3C2410_GPF(3)      #define CFG_IN     S3C2410_GPIO_INPUT      #define CFG_OUT    S3C2410_GPIO_OUTPUT           // ds18b20主次设备号动态分配      static int ds18b20_major  0;     static int ds18b20_minor  0;     static int ds18b20_nr_devs  1;          // 定义设备类型      static struct ds18b20_device     {         struct cdev cdev;     };          struct ds18b20_device *ds18b20_devp;    /*设备结构体指针 */          static struct class *ds18b20_class;     static struct class_device *ds18b20_class_dev;          /* 函数声明 */     static int ds18b20_open(struct inode *inode, struct file *filp);     static int ds18b20_init(void);     static void write_byte(unsigned char data);     static unsigned char read_byte(void);     static ssize_t ds18b20_read(struct file *filp, char __user * buf, size_t count, loff_t * f_pos);     void ds18b20_setup_cdev(struct ds18b20_device *dev, int index);          static int ds18b20_open(struct inode *inode, struct file *filp)     {         int flag  0;              flag  ds18b20_init();         if (flag  0x01)         {             printk(KERN_WARNING open ds18b20 failed\n);             return -1;         }         printk(KERN_NOTICE open ds18b20 successful\n);         return 0;     }          static int ds18b20_init(void)     {         int retval  0;              s3c2410_gpio_cfgpin(DQ, CFG_OUT);         s3c2410_gpio_pullup(DQ, 0);              s3c2410_gpio_setpin(DQ, 1);         udelay(2);         s3c2410_gpio_setpin(DQ, 0); // 拉低ds18b20总线复位ds18b20          udelay(500);                // 保持复位电平500us               s3c2410_gpio_setpin(DQ, 1); // 释放ds18b20总线          udelay(60);              // 若复位成功ds18b20发出存在脉冲低电平持续60~240us          s3c2410_gpio_cfgpin(DQ, CFG_IN);         retval  s3c2410_gpio_getpin(DQ);              udelay(500);         s3c2410_gpio_cfgpin(DQ, CFG_OUT);         s3c2410_gpio_pullup(DQ, 0);         s3c2410_gpio_setpin(DQ, 1); // 释放总线               return retval;     }          static void write_byte(unsigned char data)     {         int i  0;              s3c2410_gpio_cfgpin(DQ, CFG_OUT);         s3c2410_gpio_pullup(DQ, 1);              for (i  0; i  8; i)         {             // 总线从高拉至低电平时就产生写时隙              s3c2410_gpio_setpin(DQ, 1);             udelay(2);             s3c2410_gpio_setpin(DQ, 0);             s3c2410_gpio_setpin(DQ, data  0x01);             udelay(60);             data  1;         }         s3c2410_gpio_setpin(DQ, 1); // 重新释放ds18b20总线      }          static unsigned char read_byte(void)     {         int i;         unsigned char data  0;              for (i  0; i  8; i)         {             // 总线从高拉至低只需维持低电平17ts再把总线拉高就产生读时隙              s3c2410_gpio_cfgpin(DQ, CFG_OUT);             s3c2410_gpio_pullup(DQ, 0);             s3c2410_gpio_setpin(DQ, 1);             udelay(2);             s3c2410_gpio_setpin(DQ, 0);             udelay(2);             s3c2410_gpio_setpin(DQ, 1);             udelay(8);             data  1;             s3c2410_gpio_cfgpin(DQ, CFG_IN);             if (s3c2410_gpio_getpin(DQ))                 data | 0x80;             udelay(50);         }         s3c2410_gpio_cfgpin(DQ, CFG_OUT);         s3c2410_gpio_pullup(DQ, 0);         s3c2410_gpio_setpin(DQ, 1); // 释放ds18b20总线          return data;     }          static ssize_t ds18b20_read(struct file *filp, char __user * buf, size_t count, loff_t * f_pos)     {         int flag;         unsigned long err;         unsigned char result[2]  { 0x00, 0x00 };         //struct ds18b20_device *dev  filp-private_data;               flag  ds18b20_init();         if (flag  0x01)         {             printk(KERN_WARNING ds18b20 init failed\n);             return -1;         }              write_byte(0xcc);         write_byte(0x44);              flag  ds18b20_init();         if (flag  0x01)             return -1;              write_byte(0xcc);         write_byte(0xbe);              result[0]  read_byte();    // 温度低八位          result[1]  read_byte();    // 温度高八位               err  copy_to_user(buf, result, sizeof(result));         return err ? -EFAULT : min(sizeof(result), count);     }          static struct file_operations ds18b20_dev_fops  {         .owner  THIS_MODULE,         .open  ds18b20_open,         .read  ds18b20_read,     };          void ds18b20_setup_cdev(struct ds18b20_device *dev, int index)     {         int err, devno  MKDEV(ds18b20_major, ds18b20_minor  index);              cdev_init(dev-cdev, ds18b20_dev_fops);         dev-cdev.owner  THIS_MODULE;         err  cdev_add((dev-cdev), devno, 1);         if (err)         {             printk(KERN_NOTICE ERROR %d add ds18b20\n, err);         }     }          static int __init ds18b20_dev_init(void)     {         int result;         dev_t dev  0;              dev  MKDEV(ds18b20_major, ds18b20_minor);              if (ds18b20_major)         {             result  register_chrdev_region(dev, ds18b20_nr_devs, ds18b20);         }         else         {             result  alloc_chrdev_region(dev, ds18b20_minor, ds18b20_nr_devs, ds18b20);             ds18b20_major  MAJOR(dev);         }         if (result  0)         {             printk(KERN_WARNING ds18b20: failed to get major\n);             return result;         }              /* 为新设备分配内存和初始化 */         ds18b20_devp  kmalloc(sizeof(struct ds18b20_device), GFP_KERNEL);         if (!ds18b20_devp)         {                           /*申请失败 */             result  -ENOMEM;             goto fail_malloc;         }         memset(ds18b20_devp, 0, sizeof(struct ds18b20_device));              ds18b20_setup_cdev(ds18b20_devp, 0);              /* 自动创建设备节点 */         ds18b20_class  class_create(THIS_MODULE, ds18b20_sys_class);         if (IS_ERR(ds18b20_class))             return PTR_ERR(ds18b20_class);              ds18b20_class_dev              device_create(ds18b20_class, NULL, MKDEV(ds18b20_major, 0), NULL, ds18b20);         if (unlikely(IS_ERR(ds18b20_class_dev)))             return PTR_ERR(ds18b20_class_dev);              return 0;            fail_malloc:         unregister_chrdev_region(dev, 1);         return result;     }          static void __exit ds18b20_dev_exit(void)     {         cdev_del(ds18b20_devp-cdev);  /*注销cdev */         kfree(ds18b20_devp);        /*释放设备结构体内存 */         unregister_chrdev_region(MKDEV(ds18b20_major, 0), ds18b20_nr_devs); /*释放设备号 */         device_unregister(ds18b20_class_dev);         class_destroy(ds18b20_class);     }          module_init(ds18b20_dev_init);     module_exit(ds18b20_dev_exit);     MODULE_LICENSE(Dual BSD/GPL);     2、app-ds18b20.c [cpp] view plaincopy #include stdio.h      #include stdlib.h      #include unistd.h      #include linux/ioctl.h           // 函数声明      void ds18b20_delay(int i);          int main()     {         int fd, i;         unsigned char result[2];    // 从ds18b20读出的结果result[0]存放低八位          unsigned char integer_value  0;         float decimal_value  0;    // 温度数值,decimal_value为小数部分的值          float temperature  0;              fd  open(/dev/ds18b20, 0);         if (fd  0)         {             perror(open device failed\n);             exit(1);         }         while (1)         {             i;             read(fd, result, sizeof(result));             integer_value  ((result[0]  0xf0)  4) | ((result[1]  0x07)  4);             // 精确到0.25度              decimal_value  0.5 * ((result[0]  0x0f)  3)  0.25 * ((result[0]  0x07)  2);             temperature  (float)integer_value  decimal_value;             printf(Current Temperature:%6.2f\n, temperature);                  ds18b20_delay(500);         }     }          void ds18b20_delay(int i)     {         int j, k;         for (j  0; j  i; j)             for (k  0; k  50000; k) ;     }     测试结果 [cpp] view plaincopy [rootwww.linuxidc.com home]#     [rootwww.linuxidc.com home]#./app-ds18b20     open ds18b20 successful     Current Temperature: 23.50     Current Temperature: 23.50     Current Temperature: 23.25     Current Temperature: 23.50     Current Temperature: 23.50     Current Temperature: 23.50     ^C     [rootwww.linuxidc.com home]#
http://www.huolong8.cn/news/229997/

相关文章:

  • 网站中的轮播怎么做wordpress模板修改内容
  • 网站运行速度优化官方网站找oem做洗发水厂家
  • 网站功能怎么写沙井商城网站建设
  • 做网站用什么开发好建设银行舒城支行网站
  • 百度一下app北京网站优化seo
  • 一站式免费建站平台北海网站开发
  • 十堰网站建设培训学校网店无货源怎么做
  • 个人设计师的网站企业的网站建设
  • 县级门户网站用什么源码好怎么开自己的网店
  • 网站建设与开发开题报告网站上展示手机页面是怎么做的
  • 电商网站 投诉2024小学生时事新闻十条
  • 学校网站建设报价重庆子建设工程信息网官方
  • 企业网站如何建设报告太原注册公司在哪个网站申请
  • 海门住房和城乡建设部网站河北省建设厅网站官网业务系统
  • 网站设计工资一般多少青岛网站建设收费哪个平台好
  • 如何做公证网站网页发布时间自己设计一款新产品
  • 青海省住房建设厅网站没有公司怎么做网站
  • 泰州做网站哪家好怎么样在网站上做跳转
  • 做网站软件_手机北海网站建设网
  • 淘宝客的网站怎么做的南京斯点企业网站建设
  • 网站备案要啥wordpress本地环境链接404
  • 广东省建设厅人才网站php做网站用html做吗
  • 网站发布信息的基本流程怎么在百度上发布广告
  • 青岛开发区做网站网站商城是用什么框架做的
  • 棋盘网站开发重庆建筑工程安全施工管理安全网
  • 网站开发方案目录做毕业设计网站需要的工具
  • 设计模板网站老旧小区改造国家最新政策
  • 怎么查网站的注册信息重庆企业网络推广价格
  • 集团门户网站建设策划网站建设需求文章
  • 企业电商网站开发9个广州seo推广神技