📄 7290.lst
字号:
709 1 {
710 2 Speak = False;
711 2 if (f) delay3(200); else delay3(100);
712 2 Speak = True;
713 2 if (i>0) delay3(100);
714 2 }
715 1 }
716 void Watch(void)
717 {
718 1 WDTRST = 0x1e;
719 1 WDTRST = 0xe1;
720 1 }
721 uchar Zlg_read(uchar i)
722 {
723 1 uchar x;
724 1 start(); /* 开始 */
725 1 shift8(0x70); /* 写控制码 */
726 1 ack();
727 1 shift8(i); /* 发地址 */
728 1 ack(); /* 应答 */
729 1 start();
730 1 shift8(0x71);
731 1 ack();
732 1
733 1 SDA = True; delay(1);
734 1 for (x=0; x<8; x++) /* 读数据 */
735 1 {
C51 COMPILER V7.09 7290 08/23/2004 17:15:04 PAGE 13
736 2 AD = AD * 2;
737 2 SCL = True; delay(1);
738 2 AD_0 = SDA;
739 2 SCL = False; delay(1);
740 2 }
741 1 stop();
742 1 return(AD);
743 1 }
744 void Zlg_write(uchar *p)
745 {
746 1 start();
747 1 shift8(0x70);//SendByte(0x70);
748 1 ack();
749 1 Watch();
750 1 shift8(*p++);//SendByte(address);
751 1 ack();
752 1 shift8(*p++);//SendByte(i);
753 1 ack();
754 1 shift8(*p);
755 1 ack();
756 1 stop();
757 1 }
758 void Zlg_writebyte(uchar address,uchar i)
759 {
760 1 start();
761 1 shift8(0x70);
762 1 ack();
763 1 Watch();
764 1 shift8(address);
765 1 ack();
766 1 shift8(i);
767 1 ack();
768 1 stop();
769 1 }
770 void delay(uchar i)
771 {
772 1 while (i > 0)
773 1 {
774 2 i--;
775 2 }
776 1 Watch();
777 1 }
778 void shift8(uchar ch)
779 {
780 1 uchar i=8;
781 1
782 1 SCL=0;
783 1 delay_nop();
784 1 while(i--)
785 1 {
786 2 SDA=(bit)(ch&0x80);
787 2 _nop_();_nop_();_nop_();
788 2 ch<<=1;
789 2 SCL=1;
790 2 _nop_();_nop_();_nop_();_nop_();_nop_();
791 2 SCL=0;
792 2 _nop_();_nop_();
793 2 }
794 1 }
795 /*void shift8(uchar a)
796 {
797 uchar i;
C51 COMPILER V7.09 7290 08/23/2004 17:15:04 PAGE 14
798 AD = a;
799 Watch();
800 for (i=0; i<8; i++)
801 {
802 SDA = AD_7; delay_nop();
803 SCL = True; delay_nop();
804 SCL = False; delay_nop();
805 AD = AD * 2;
806 }
807 }*/
808 void start()
809 {
810 1
811 1 SDA=1; /*发送起始条件的数据信号*/
812 1 _nop_();
813 1 _nop_();
814 1 _nop_();
815 1 SCL=1;
816 1 _nop_(); /*起始条件建立时间大于4.7us,延时*/
817 1 _nop_();
818 1 _nop_();
819 1 _nop_();
820 1 _nop_();
821 1 _nop_();
822 1 SDA=0; /*发送起始信号*/
823 1 _nop_(); /* 起始条件锁定时间大于4μs*/
824 1 _nop_();
825 1 _nop_();
826 1 _nop_();
827 1 _nop_();
828 1 _nop_();
829 1 SCL=0; /*钳住I2C总线,准备发送或接收数据 */
830 1 _nop_();
831 1 _nop_();
832 1 _nop_();
833 1 //SDA = True; delay_nop();
834 1 //SCL = True; delay_nop();
835 1 //SDA = False; delay_nop();
836 1 //SCL = False; delay_nop();
837 1 }
838
839 void ack(void)
840 {
841 1 SDA=1;
842 1 SCL=0;
843 1 _nop_();_nop_();
844 1 SCL=1;
845 1 _nop_();_nop_();_nop_();_nop_();_nop_();
846 1 //while(SDA){;} //This may make the CPU crash. 04-3-18 17:16
847 1 SCL=0;
848 1 _nop_();_nop_();
849 1 }
850
851
852 /*-----------------------------------------------
853 调用方式:void no_ack(void)
854 函数说明:无需应答位,在读程序中用到
855 -----------------------------------------------*/
856 void no_ack(void)
857 {
858 1 SDA=1;
859 1 delay_nop();
C51 COMPILER V7.09 7290 08/23/2004 17:15:04 PAGE 15
860 1 SCL=1;
861 1 delay_nop();
862 1 //while(SDA){;} //This may make the CPU crash. 04-3-18 17:16
863 1 SCL=0;
864 1 delay_nop();
865 1 }
866 void stop()
867 {
868 1 SDA=0; /*发送结束条件的数据信号*/
869 1 _nop_(); /*发送结束条件的时钟信号*/
870 1 _nop_();
871 1 SCL=1; /*结束条件建立时间大于4μs*/
872 1 _nop_();
873 1 _nop_();
874 1 _nop_();
875 1 _nop_();
876 1 _nop_();
877 1 _nop_();
878 1 SDA=1; /*发送I2C总线结束信号*/
879 1 _nop_();
880 1 _nop_();
881 1 _nop_();
882 1 _nop_();
883 1 _nop_();
884 1 //SDA = False; delay_nop(); /* 停止 */
885 1 //SCL = True; delay_nop();
886 1 //SDA = True; delay_nop();
887 1 }
888 void SendByte(uchar c)
889 {
890 1 uchar BitCnt;
891 1
892 1 for(BitCnt=0;BitCnt<8;BitCnt++) /*要传送的数据长度为8位*/
893 1 {
894 2 if((c<<BitCnt)&0x80) SDA=1; /*判断发送位*/
895 2 else SDA=0;
896 2 _nop_();
897 2 _nop_();
898 2 _nop_();
899 2 SCL=1; /*置时钟线为高,通知被控器开始接收数据位*/
900 2 _nop_();
901 2 _nop_(); /*保证时钟高电平周期大于4μs*/
902 2 _nop_();
903 2 _nop_();
904 2 _nop_();
905 2 SCL=0;
906 2 }
907 1
908 1 _nop_();
909 1 _nop_();
910 1 _nop_();
911 1 SDA=1; /*8位发送完后释放数据线,准备接收应答位*/
912 1 _nop_();
913 1 _nop_();
914 1 _nop_();
915 1 SCL=1;
916 1 _nop_();
917 1 _nop_();
918 1 _nop_();
919 1 if(SDA==1) YesNo_ack=0;
920 1 else YesNo_ack=1; /*判断是否接收到应答信号*/
921 1 SCL=0;
C51 COMPILER V7.09 7290 08/23/2004 17:15:04 PAGE 16
922 1 _nop_();
923 1 _nop_();
924 1 _nop_();
925 1 }
926 void delay_nop()
927 {
928 1 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
929 1 _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
930 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 2323 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 12 41
IDATA SIZE = ---- ----
BIT SIZE = 2 10
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -