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