还剩101页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
同为嵌入式教育培训中心芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿蒆螈衿芈蒅蒈肅芄蒄蚀羇膀蒄螃膃肆蒃袅羆莄蒂薄蝿芀蒁蚇羄膆薀蝿螇肂蕿葿羂羈薈薁螅莇薈螃肁芃薇袆袃腿薆薅聿肅薅蚈袂莄薄螀肇芀蚃袂袀膅蚂薂肅肁艿蚄袈肇芈袇膄莆芇薆羇节芆蚈膂膈芆螁羅肄芅袃螈莃莄薃羃艿莃蚅螆膅莂螇羁膁莁薇螄肇莀虿肀莅莀螂袃芁荿袄肈膇莈薄袁肃蒇蚆肆罿单片机基础与实验于荣成等编著同为嵌入式教育2009年2月28日TOC\o1-3\h\z\u1第一讲keil软件熟悉4课时
111.1Keil__
111.2KeilC的工程创建与配置
151.3KeilC的单步调试与软件仿真
251.4KeilC变量与中间文件分析
261.5启动代码
261.6KeilC的结果文件262第二讲单片机程序空间和__板逻辑分析(8课时)
272.1单片机程序空间
272.
1.1RAM在单片机的空间分配
282.
1.2SFR在单片机的空间分配
282.
1.3ROM在单片机的空间分配
282.2XBYTE
282.3片选
292.4跑马灯程序
292.5作业293第三讲定时器和中断4课时304第四讲串口程序4课时
394.1作业
394.2硬件原理
394.
2.1TTL电平
394.
2.2RS232电平
394.3串行通讯的方式
394.
3.1异步通讯
394.
3.2同步通讯
394.
3.3通讯方向
394.48051单片机的串行接口结构
394.5串行口控制寄存器SCON
404.6串行口的工作方式
414.
6.1方式
0414.
6.2方式
1414.
6.3方式
2414.
6.4方式
3424.7波特率设置
424.
7.1波特率设置
424.8串口中断设置
434.9程序代码435第七讲IIC总线与实时时钟8课时
445.1作业
445.2IIC原理
445.
2.1原理
455.
2.2总线基本操作
465.3DS1307实时时钟
465.
3.1DS1307的工作时序
465.
3.2程序代码476第五超级终端8课时
516.1作业
516.2超级终端原理
516.
2.1超级终端的作用
516.
2.2超级终端的使用
516.3关键程序代码527第六讲任务调度与前后台系统(8课时)
617.1任务调度与前后台系统
617.
1.1问题引入假设有如下项目
617.2低级处理方式:
617.3高级处理方式
617.
3.1任务调度表
617.
3.2处理方式628第八讲单总线与DS18B208课时
648.1硬件结构
648.21-wire命令序列
648.3ROM搜索原理
658.4程序实现669第九讲A/D转换4课时
709.1作业
709.2A/D转换原理
709.
2.1ADC0831介绍
709.
2.2逐次逼近式A/D转换器原理
709.3时序
719.
3.1程序代码7210第十讲红外线(8课时)
7410.1作业
7410.2红外遥控系统
7410.3HS9012时序
7910.4遥控__接收
7910.5程序代码7911第十一讲液晶显示模块__C1602(8课时)
8211.1作业
8211.2__C1602显示原理
8211.3硬件说明
8411.
3.1状态字说明
8811.
3.2RAM地址映射图
8811.
3.3初始化设置命令__
11.
3.4数据与控制命令__
11.4LCD初始化过程(复位过程)时序
9011.5__C1602时序
8711.
5.1读操作时序
8711.
5.2写操作时序
8711.
5.3操作时序
8811.6程序代码9012第十二讲重入函数与堆栈(4课时)947第二章单片机的硬件结构和原理第1节概述什么是单片机及单片机的特点单片机是指在一块芯片上集成了CPU,ROM,RAM,定时器/计时器和多种I/O接口电路等,具有一定规模的微型计算机单片机与通用微型计算机相比,在硬件结构,指令设置上均有独到之处单片机以其卓越的性能,得到了广泛的应用,已深入到各个领域单片机应用在检测,控制,仪器仪表等各个领域中,其主要特点如下小巧灵活,成本低,易于产品化,能够组装成各种智能式测控设备及智能仪器仪表可靠性好,应用范围广单片机芯片本身是按工业控制测控环境要求设计的,抗干扰性强,能够适应各种恶劣的环境,这是其它机种无法比拟的功能齐全,扩展性强,很容易构成各种规模的应用系统,控制功能强单片机内部有掩模ROM,内部E2PROM和外接ROM等形式,并可以很方便的扩展外部的ROM,RAM及I/O接口,与许多通用的微机接口芯片兼容,给应用系统的设计和生产带来了极大的方便具有通信功能,可以很方便的实现多机和分布式控制,形成控制网络和远程控制单片机的功能是通用的,单片机主要作控制器使用,但功能上是通用的,可以像一般微处理器那样广泛的应用在各个领域单片机发展简史1.1单片机简介单片机是一种集成电路芯片它采用超大规模技术将具有数据处理能力的微处理器CPU、存储器(含程序存储器ROM和数据存储器RAM)、输入、输出接口电路I/O接口集成在同一块芯片上,构成一个即小巧又很完善的计算机硬件系统,在单片机程序的控制下能准确、迅速、高效地完成程序设计者事先规定的任务所以说,一片单片机芯片就具有了组成计算机的全部功能由此来看,单片机有着一般微处理器(CPU)芯片所不具备的功能,它可单独地完成现代工业控制所要求的智能化控制功能,这是单片机最大的特征然而单片机又不同于单板机(一种将微处理器芯片、存储器芯片、输入输出接口芯片__在同一块印制电路板上的微型计算机),单片机芯片在没有__前,它只是具备功能极强的超大规模集成电路,如果对它进行应用__,它便是一个小型的微型计算机控制系统,但它与单板机或个人电脑PC机有着本质的区别单片机的应用属于芯片级应用,需要用户(单片机学习者与使用者)了解单片机芯片的结构和指令系统以及其它集成电路应用技术和系统设计所需要的理论和技术,用这样特定的芯片设计应用程序,从而使该芯片具备特定的功能不同的单片机有着不同的硬件特征和软件特征,即它们的技术特征均不尽相同,硬件特征取决于单片机芯片的内部结构,用户要使用某种单片机,必须了解该型产品是否满足需要的功能和应用系统所要求的特性指标这里的技术特征包括功能特性、控制特性和电气特性等等,这些信息需要从生产厂商的技术手册中得到软件特征是指指令系统特性和__支持环境,指令特性即我们熟悉的单片机的寻址方式,数据处理和逻辑处理方式,输入输出特性及对电源的要求等等__支持的环境包括指令的兼容及可移植性,支持软件包含可支持__应用程序的软件资源及硬件资源要利用某型号单片机__自己的应用系统,掌握其结构特征和技术特征是必须的单片机控制系统能够取代以前利用复杂电子线路或数字电路构成的控制系统,可以以软件控制来实现,并能够实现智能化,现在单片机控制范畴无所不在,例如通信产品、家用电器、智能仪器仪表、过程控制和专用控制装置等等,单片机的应用领域越来越广泛诚然,单片机的应用意义远不限于它的应用范畴或由此带来的经济效益,更重要的是它已从根本上改变了传统的控制方法和设计思想是控制技术的一次__,是一座重要的里程碑1.2单片机发展概述1946年第一台电子计算机诞生至今,依靠微电子技术和半导体技术的进步,从电子管——晶体管——集成电路——大规模集成电路,使得计算机体积更小,功能更强特别是近20年时间里,计算机技术获得飞速的发展,计算机在工农业,科研,教育,国防和____领域获得了广泛的应用,计算机技术已经是一个国家现代科技水平的重要标志单片机诞生于20世纪70年代,象Fairchild公司研制的F8单片微型计算机所谓单片机是利用大规模集成电路技术把__处理单元__nterPro__ssingUnit也即常称的CPU和数据存储器RAM、程序存储器ROM及其他I/O通信口集成在一块芯片上,构成一个最小的计算机系统,而现代的单片机则加上了中断单元,定时单元及A/D转换等更复杂、更完善的电路,使得单片机的功能越来越强大,应用更广泛20世纪70年代,微电子技术正处于发展阶段,集成电路属于中规模发展时期,各种新材料新工艺尚未成熟,单片机仍处在初级的发展阶段,元件集成规模还比较小,功能比较简单,一般均把CPU、RAM有的还包括了一些简单的I/O口集成到芯片上,象Fairchild公司就属于这一类型,它还需配上__的其他处理电路方才构成完整的计算系统类似的单片机还有Zilog公司的Z80微处理器1976年INTEL公司推出了MCS-48单片机,这个时期的单片机才是真正的8位单片微型计算机,并推向市场它以体积小,功能全,__低赢得了广泛的应用,为单片机的发展奠定了基础,成为单片机发展史上重要的里程碑在MCS-48的带领下,其后,各大半导体公司相继研制和发展了自己的单片机,象Zilog公司的Z8系列到了80年代初,单片机已发展到了高性能阶段,象INTEL公司的MCS-51系列,Motorola公司的6801和6802系列,Rokwell公司的6501及6502系列等等此外__的著名电气公司NEC和HITACHI都相继__了具有自己特色的专用单片机80年代,世界各大公司均竞相研制出品种多功能强的单片机,约有几十个系列,300多个品种,此时的单片机均属于真正的单片化,大多集成了CPU、RAM、ROM、数目繁多的I/O接口、多种中断系统,甚至还有一些带A/D转换器的单片机,功能越来越强大,RAM和ROM的容量也越来越大,寻址空间甚至可达64kB,可以说,单片机发展到了一个新的平台.单片机诞生于20世纪70年代末,经历了SCMhttp://___.eefocus.com/dictionary/wordlink.phpkeyword=SCM、MCUhttp://___.eefocus.com/dictionary/wordlink.phpkeyword=MCU、SoChttp://___.eefocus.com/dictionary/wordlink.phpkeyword=SoC三大阶段
1.SCMhttp://___.eefocus.com/dictionary/wordlink.phpkeyword=SCM即单片微型计算机(SingleChipMicrocomputer)阶段,主要是寻求最佳的单片形态嵌入式系统的最佳体系结构“创新模式”获得成功,奠定了SCMhttp://___.eefocus.com/dictionary/wordlink.phpkeyword=SCM与通用计算机完全不同的发展道路在开创嵌入式系__立发展道路上,Intel公司功不可没
2.MCUhttp://___.eefocus.com/dictionary/wordlink.phpkeyword=MCU即微控制器(MicroControllerUnit)阶段,主要的技术发展方向是不断扩展满足嵌入式应用时,对象系统要求的各种__电路与接口电路,突显其对象的智能化控制能力它所涉及的领域都与对象系统相关,因此,发展MCUhttp://___.eefocus.com/dictionary/wordlink.phpkeyword=MCU的重任不可避免地落在电气、电子技术厂家从这一角度来看,Intel逐渐淡出MCUhttp://___.eefocus.com/dictionary/wordlink.phpkeyword=MCU的发展也有其客观因素在发展MCUhttp://___.eefocus.com/dictionary/wordlink.phpkeyword=MCU方面,最著名的厂家当数Philips公司 Philips公司以其在嵌入式应用方面的巨大优势,将MCS-51从单片微型计算机迅速发展到微控制器因此,当我们回顾嵌入式系统发展道路时,不要忘记Intel和Philips的历史功绩
3.单片机是嵌入式系统的__发展之路,向MCUhttp://___.eefocus.com/dictionary/wordlink.phpkeyword=MCU阶段发展的重要因素,就是寻求应用系统在芯片上的最大化解决;因此,专用单片机的发展自然形成了SoChttp://___.eefocus.com/dictionary/wordlink.phpkeyword=SoC化趋势随着微电子技术、IC设计、EDA工具的发展,基于SoChttp://___.eefocus.com/dictionary/wordlink.phpkeyword=SoC的单片机应用系统设计会有较大的发展因此,对单片机的理解可以从单片微型计算机、单片微控制器延伸到单片应用系统单片机作为微型计算机的一个重要分支,应用面很广,发展很快自单片机诞生至今,已发展为上百种系列的近千个机种如果将8位单片机的推出作为起点,那么单片机的发展历史大致可分为以下几个阶段
(1)第一阶段(1976-1978)单片机的控索阶段以Intel公司的MCS-48为代表MCS–48的推出是在工控领域的控索,参与这一控索的公司还有Motorola、Zilog等,都取得了满意的效果这就是SCM的诞生年代,“单机片”一词即由此而来
(2)第二阶段(1978-1982)单片机的完善阶段Intel公司在MCS-48的基础上推出了完善的,典型的单片机系列MCS–51它在以下几个方面奠定了典型的通用总线型单片机体系结构
①完善的外部总线MCS-51设置了经典的8位单片机的总线结构,包括8位数据总线、16位地址总线、控制总线及具有很多机通信功能的串行通信接口
②CPU__功能单元的集中管理模式
③体现工控特性的位地址空间及位操作方式
④指令系统趋于丰富和完善,并且增加了许多突出控制功能的指令
(3)第三阶段(1982-1990)8位单片机的巩固发展及16位单片机的推出阶段,也是单片机向微控制器发展的阶段Intel公司推出的MCS–96系列单片机,将一些用于测控系统的模数转换器、程序运行监视器、脉宽调制器等纳入片中,体现了单片机的微控制器特征随着MCS–51系列的广应用,许多电气厂商竞相使用80C51为内核,将许多测控系统中使用的电路技术、接口技术、多通道A/D转换部件、可靠性技术等应用到单片机中,增强了__电路路功能,强化了智能控制的特征
(4)第四阶段(1990-)微控制器的全面发展阶段随着单片机在各个领域全面深入地发展和应用,出现了高速、大寻址范围、强运算能力的8位/16位/32位通用型单片机,以及小型廉价的专用型单片机单片机发展趋势目前,单片机正朝着高性能和多品种方向发展趋势将是进一步向着CMOS化、低功耗、小体积、大容量、高性能、低__和__电路内装化等几个方面发展下面是单片机的主要发展趋势
(1)CMOS技术近年,由于CHMOS技术的进步,大大地促进了单片机芯片采用CMOS技术进行设计和生产CMOS芯片除了低功耗特性之外,还具有功耗的可控性,使单片机可以工作在功耗精细管理状态因为单片机芯片多数是采用CMOS(金属栅氧化物)半导体工艺生产CMOS电路的特点是低功耗、高密度、低速度、低__采用双极型半导体工艺的TTL电路速度快,但功耗和芯片__较大随着技术和工艺水平的提高,又出现了HMOS(高密度、高速度MOS)和CHMOS工艺CHMOS和HMOS工艺的结合目前生产的CHMOS电路已达到LSTTL的速度,传输延迟时间小于2ns,它的综合优势已优于TTL电路因而,在单片机领域CMOS正在逐渐取代TTL电路
(2)低功耗单片机的功耗已下降许多,静态电流甚至降到1uA以下;使用电压在3~6V之间,完全能够适应于电池工作低功耗化的效应不仅是功耗低,而且带来了产品的高可靠性、高抗干扰能力以及产品的便携化
(3)低电压几乎所有的单片机都有WAIT、STOP等省电运行方式允许使用的电压范围越来越宽,一般在3~6V范围内工作低电压供电的单片机电源下限已可达1~2V目前
0.8V供电的单片机已经问世
(4)低噪声与高可靠性为提高单片机的抗电磁干扰能力,使产品能适应恶劣的工作环境,满足电磁兼容性方面更高标准的要求,各单片厂家在单片机内部电路中都采用了新的技术措施
(5)大容量以往单片机内的ROM为1KB~4KB,RAM为64~128B但在需要复杂控制的场合,该存储容量是不够的,必须进行外接扩充为了适应这种领域的要求,须运用新的工艺,使片内存储器大容量化目前,单片机内ROM最大可达64KB,RAM最大为2KB
(6)高性能主要是指进一步改变CPU的性能,加快指令运算的速度和提高系统控制的可靠性采用精简指令集(RISC)结构和流水线技术,可以大幅度提高运行速度现指令速度最高者已达100MIPS(MillionInstructionPerSeconds,即兆指令每秒),并加强了位处理、中断和定时控制功能这类单片机的运算速度比标准的单片机高出10倍以上由于这类单片机有极高的指令速度,可以使用软件模拟其I/O功能,由此引入了虚拟外设的新概念
(7)小容量、低__与上述相反,以4位、8位机为中心的小容量、低__化也是发展动向之一这类单片机的用途是把以往用数字逻辑集成电路组成的控制电路单片化,可广泛用于家电产品
(8)__电路内装这也是单片机发展的主要方向随着集成度的不断提高,有可能把众多的各种处围功能器件集成在片内除了一般必须具有的CPU、ROM、RAM、定时器/计数器等以外,片内集成的部件还有模/数转换器、D__控制器、声音发生器、监视定时器、液晶显示驱动器、彩色电视机和录像机用的锁相电路等
(9)串行扩展技术在很长一段时间里,通用型单片机通过三总线结构扩展__器件成为单片机应用的主流结构随着低价位OTP(OneTimeProgramble)及各种特殊类型片内程序存储器的发展,加之处围接口不断进入片内,推动了单片机“单片”应用结构的发展特别是I2C、SPI等串行总线的引入,可以使单片机的引脚设计得更少,单片机系统结构更加简化及规范化随着半导体集成工艺的不断发展,单片机的集成度将更高、体积将更小、功能将更强在单片机家族中,80C51系列是其中的佼佼者,加之Intel公司将其MCS–51系列中的80C51内核使用权以专利互换或出售形式转让给全世界许多著名IC设计厂商,如Philips、NEC、Atmel、AMD、华邦等,这些公司都在保持与80C51单片机兼容的基础上改善了80C51的许多特性这样,80C51就变成有众多制造厂商支持的、发展出上百品种的大家族,现统称为80C51系列80C51单片机已成为单片机发展的主流专家认为,虽然世界上的MCU品种繁多,功能各异,__装置也互不兼容,但是客观发展表明,80C51可能最终形成事实上的标准MCU芯片.第2节MCS-51单片机硬件结构MCS-51系列单片机的分类第3节__处理器CPU第4节存储器的结构第5节并行输入/输出接口第6节单片机的引脚及其功能第7节单片机工作的基本时序1第一讲keil软件熟悉4课时
1.1Keil____完全版的V
7.50版本KeilC软件打开软件所在的文件夹——打开《__说明》文件——仔细看__说明;进入setup文件夹__setup.exe文件开始__——出现以下__界面——__NEXT——选择FullVersion——一路__NEXT出现以下__界面,选择keil将要__在哪个盘,一般默认就可以了——将序列号填入,然后按以下填写就可以了——将选项的勾去掉,__NEXT——然后一路__NEXT,就可以了!OK软__完成了,祝大家学习愉快!有任何问题请联络我laoyu1015@
163.com
1.2KeilC的工程创建与配置__桌面上的KeiluVision2图标,进入Keil软件编辑界面——__Projiect——__新建工程——你要将工程放在哪个文件夹内——建议每个工程都单独建立一个文件夹,以避免不必要的麻烦选择你__板上的CPU芯片——我这里选择的是ATEML的AT__S52——然后出现以下界面,一般__是就可以了,给你添加了一个启动代码——工程建立完成了,我们下面就开始往工程内添加文件呢好玩吧!__File——__New——新建一个文件__编辑文件,如下__File——__S__E——保存一个文件文件名任意,但后缀为“.c”的文件然后保存右键__Sour__Group1——选择AddFilestoGroup‘Sour__Group1’将刚才新建的c文件添加到工程内__Add,这时左边的工程就添加了__in.c文件了这时__Close关闭对话框双击__in.c,然后进行编辑__工具栏的Rebuildalltargetfiles编译工程或者__Projec——Rebuildalltargetfiles编译工程根据编译链接的信息来修改程序,确保没有什么错误如果没有什么错误,就会出现以下界面表示工程已经编译、链接完成这个时候还有一个问题没有解决,即我要烧录到单片机的程序还没有生成呢?到底是什么程序呢,怎么生成呢?请见下面的KeilC的工程的配置部分
1.3KeilC的工程配置在工程图标上__右键——__OptionsforTarget‘Target1’进入工程配置或者__Project——__OptionsforTarget‘Target1’进入工程配置界面如下芯片选择、晶振频率选择、RAM范围、ROM范围、out文件选定、define的定义、debug选项的配置
1.4KeilC的单步调试与软件仿真单步仿真、断点设置、memory窗口、serial窗口、工程窗口、变量窗口、I/O口的软件仿真及单步调试、反汇编窗口Disassembly窗口14:while115:{16:P0=0x00;C:0x0009E4CLRAC:0x000AF580MOVP00x80A17:DBYTE[0x80]=0xaa;C:0x000C7880MOVR0#P00x80C:0x000E76AAMOV@R0#0xAA18:DBYTE[0x73]=DBYTE[0x80];C:0x0010E6MOVA@R0C:0x00117873MOVR0#0x73C:0x0013F6MOV@R0A19:delay;C:0x0014120027LCALLdelayC:002720:P0=0xff;分析14~20——是c语言程序C:0x0009——是code地址E4——HEX文件的十六进制代码CLRA——汇编程序
1.5KeilC变量与中间文件分析List文件、M51文件、HEX文件分析
1.6启动代码(保留)
1.7KeilC的结果文件HEX文件分析
1.
1.1编程规范同为编程规范(保留)
1.
1.2作业在keil软件仿真条件下,循环操作P1口的8个引脚利用__板操作LED,熟悉I/O的操作
1.
1.3其它2第二讲单片机程序空间和__板逻辑分析(8课时)
2.1单片机程序空间
2.
1.1RAM在单片机的空间分配SFR80H-FFH为SFR的地址空间是没问题,如果在52里,SFR的空间跟RAM是两个不同的存储空间,RAM是间接寻址,而SFR是直接寻址的IDATA的地址空间为80H~FFH,即128字节之后的RAM空间R0~R70~3100H~1FH共32个字节是4个通用工作寄存器,4组R0~R7在发生中断嵌套时候可以实现现场保护措施R0~R7在中断函数程序中使用了在进入中断程序时候也需要压栈堆栈:51内部RAMDATA空间可以设置堆栈,但它的位置是不固定的通过SP(栈指针)来确定栈底地址,往上升最多128字节,不能够超出data空间子程序调用时将PC(程序指针,2个字节)压栈,完成后又出栈中断函数需要压栈的寄存器更多可以通过RAM_SFR_ROMdemo程序来分析DPTR数据指针,16位;高位DPH低位DPL,主要用来保持16位地址,可以对64KBYTE空间寻址
2.
1.2SFR在单片机的空间分配可以通过以下实验来区分空间的差别While1{P0=0x00;DBYTE[0x80]=0xaa;DBYTE[0x73]=DBYTE[0x80];delay;P0=0xff;DBYTE[0x80]=0xbb;DBYTE[0x73]=DBYTE[0x80];delay;}
2.
1.3ROM在单片机的空间分配/EA=0选用外部ROM空间/EA=1外部ROM空间
2.2XBYTE#defineXBYTEchar*0x20000L数组、指针数组、2为xdata、0000为数组指针的起始地址、L为长整型#defineCBYTEunsignedchar*0x50000L#defineDBYTEunsignedchar*0x40000L#definePBYTEunsignedchar*0x30000L#defineXBYTEunsignedchar*0x20000L见《指针不完全手册》
2.3片选程序空间、地址线数量、62256地址、片选地址、片选地址的确定
2.4跑马灯程序跑马灯程序设计
2.5作业数码管原理、程序设计原理继电器操作、蜂鸣器操作计数500秒表设计3第三讲定时器
3.1作业非中断方式下流水灯非中断方式下数码管显示
1、
2、
3、
4、
5、6非中断方式下500计数非中断模式下的秒表程序显示秒表分、秒、1/100秒秒表的停、开始、清零动作
3.2定时器/计数器的结构及工作原理图
3.1定时器/计数器结构框图加法计数器是计满溢出时才申请中断所以在给计数器赋初值时不能直接输入所需的计数值而应输入的是计数器计数的最大值与这一计数值的差值设最大值为M计数值为N初值为X则X的计算方法如下:计数状态:X=M-N定时状态:X=M-定时时间/T而T=12÷晶振频率
3.3方式和控制寄存器
3.
3.1定时器/计数器的方式寄存器TMOD图
6.2TMOD各位定义
3.4工作方式
3.5定时器/计数器应用举例4MCS-51单片机的中断4课时
4.1作业中断方式下流水灯中断方式下数码管显示
1、
2、
3、
4、
5、6中断方式下的秒表程序显示秒表分、秒、1/100秒秒表的停、开始、清零动作
4.2中断的概述
4.
2.1中断中断是指计算机在执行某一程序的过程中由于计算机系统内、外的某种原因而必须中止原程序的执行转去执行相应的处理程序待处理结束之后再回来继续执行被中止的原程序的过程采用了中断技术后的计算机可以解决CPU与外设之间速度匹配的问题使计算机可以及时处理系统中许多随机的参数和信息同时它也提高了计算机处理故障与应变的能力
4.
2.2中断源中断源是指在计算机系统中向CPU发出中断请求的来源中断可以人为设定也可以是为响应突发性随机__而设置通常有I/O设备、实时控制系统中的随机参数和信息故障源等
4.
2.3中断优先级中断优先级越高则响应优先权就越高当CPU正在执行中断服务程序时又有中断优先级更高的中断申请产生这时CPU就会暂停当前的中断服务转而处理高级中断申请待高级中断处理程序完毕再返回原中断程序断点处继续执行这一过程称为中断嵌套
4.
2.4中断响应的过程1在每条指令结束后系统都自动检测中断请求__如果有中断请求,且CPU处于开中断状态下则响应中断2保护现场在保护现场前一般要关中断以防止现场被破坏保护现场一般是用堆栈指令将原程序中用到的寄存器推入堆栈3中断服务即为相应的中断源服务4恢复现场用堆栈指令将保护在堆栈中的数据弹出来在恢复现场前要关中断以防止现场被破坏在恢复现场后应及时开中断5返回此时CPU将推入到堆栈的断点地址弹回到程序计数器从而使CPU继续执行刚才被中断的程序
4.3MCS-51中断系统图
4.1MCS-51中断系统结构框图
4.
3.1中断源表
4.18051中断源特殊功能寄存器TCON中的标志D7D6D5D4D3D2D1D0TF1TR1TF0TR0IE1IT1IE0IT0特殊功能寄存器SCOND7D6D5D4D3D2D1D0__0__1__2RENTB0RB0TIRI
4.
3.2中断控制中断允许控制寄存器IED7D6D5D4D3D2D1D0EAXET2ESET1EX1ET0EX0MCS-51单片机有5个(8052有6个)中断源为了使每个中断源都能__地被允许或禁止以便用户能灵活使用它在每个中断__的通道中设置了一个中断屏蔽触发器只有该触发器无效它所对应的中断请求__才能进入CPU即此类型中断开放否则即使其对应的中断标志位置1CPU也不会响应中断即此类型中断被屏蔽了同时CPU内还设置了一个中断允许触发器它控制CPU能否响应中断中断优先级寄存器IPD7D6D5D4D3D2D1D0XXPT2PSPT1PX1PT0PX0表
4.2同级内第二优先级次序
4.
3.3中断响应
4.
3.
3.1中断响应的条件1)同级或高优先级的中断已在进行中;2)当前的机器周期还不是正在执行指令的最后一个机器周期(换言之正在执行的指令完成前任何中断请求都得不到响应);3)正在执行的是一条RETI或者访问特殊功能寄存器IE或IP的指令(换言之在RETI或读写IE或IP之后不会马上响应中断请求而至少执行一条其它指令之后才会响应)
4.
3.
3.2中断响应过程单片机一旦响应中断请求就由硬件完成以下功能:1)根据响应的中断源的中断优先级使相应的优先级状态触发器置1;2)执行硬件中断服务子程序调用并把当前程序计数器PC的内容压入堆栈;3)清除相应的中断请求标志位(串行口中断请求标志RI和TI除外);4)把被响应的中断源所对应的中断服务程序的入口地址(中断矢量)送入PC从而转入相应的中断服务程序表
4.3中断服务程序入口地址表例如现有外部中断1提出申请且主程序中有R
0、R
1、DPTR、累加器A需保护则编制程序应为:ORG0000HAJMP__INORG0013HLJMPINT1…ORG0100HMAIN:…;主程序…ORG1000HINT1:PUSHACC;中断服务程序PUSHDPHPUSHDPLPUSH0PUSH1POP1POP0POPDPLPOPDPHPOPACCRETI编程中应注意:1)在0000H放一条跳转到主程序的跳转指令这是因为MCS-51单片机复位后PC的内容变为0000H程序从0000H开始执行紧接着0003H是中断程序入口地址故在此中间只能插入一条转移指令;2)响应中断时先自动执行一条隐指令“LCALL0013H”而0013H至001BH(定时器1溢出中断入口地址)之间可利用的存储单元不够故放一条无条件转移指令3)在中断服务程序的末尾必须安排一条中断返回指令RETI使程序自动返回主程序
4.4中断系统的应用例1单步操作的中断实现把一个外部中断(设为INT0])设置为电平激活方式其中断服务程序的末尾写上如下几条指令:JNBP
3.2$;在INT0变高前原地等待死循环JBP
3.2$;在INT0变低前原地等待死循环RETI;返回并执行一条指令现在若INT0保持低电平且允许INT0中断则CPU就进入外部中断0服务程序由于有上述几条指令它就会停在JNB处原地等待当INT0端出现一个正脉冲(由低到高再到低)时程序就会往下执行执行RETI后将返回主程序往下执行一条指令然后又立即响应中断以等待INT0端出现的下一个正脉冲这样在INT0端每出现一个正脉冲主程序就执行一条指令实现了单步执行的目的要注意的是这个正脉冲的高电平持续时间不小于3个周期以确保CPU能采集到高电平值例2多中断源MCS-51单片机有两个外部中断输入端当有2个以上中断源时它的中断输入端就不够了此时可以采用中断与查询相结合的方法来实现可以使每个中断源都接在同一个外部中断输入端上同时利用输入口线作为多中断源情况下各中断源的识别线图
4.6多中断源ORG0003HLJMPINT0…INT0:PUSHPSWPUSHACCJBP
0.7DV1JBP
0.6DV2JBP
0.5DV3JBP
0.4DV4GOBACK:POPACCPOPPSWRETIDV1:…;装置1中断服务程序…AJMPGOBACKDV2:…;装置2中断服务程序…AJMPGOBACKDV3:…;装置3中断服务程序…AJMPGOBACKDV4:…;装置4中断服务程序…AJMPGOBACK5第四讲串口程序4课时
5.1作业非中断模式下发送、接收数据,利用超级终端ASCII码键盘程序中断模式下收发数据,利用超级终端ASCII码键盘程序
5.2硬件原理
5.
2.1TTL电平TTL Transistor-TransistorLogic三极管结构Vcc5V;VOH=
2.4V;VOL=
0.5V;VIH=2V;VIL=
0.8V
5.
2.2RS232电平232电平或者说串口电平,有的甚至说计算机电平,所有的这些说法,指得都是计算机9针串口(RS232)得电平,采用负逻辑,-15v~-3v代表1+3v~+15v代表
05.3串行通讯的方式异步通讯它用一个起始位表示字符的开始,用停止位表示字符的结束其每帧的格式如下在一帧格式中,先是一个起始位0,然后是8个数据位,规定低位在前,高位在后,接下来是奇偶校验位(可以省略),最后是停止位1用这种格式表示字符,则字符可以一个接一个地传送在异步通讯中,CPU与外设之间必须有两项规定,即字符格式和波特率字符格式的规定是双方能够在对同一种0和1的串理解成同一种意义原则上字符格式可以由通讯的双方自由制定,但从通用、方便的角度出发,一般还是使用一些标准为好,如采用ASCII标准波特率即数据传送的速率,其定义是每秒钟传送的二进制数的位数例如,数据传送的速率是120字符/s,而每个字符如上述规定包含10数位,则传送波特率为1200波特同步通讯在异步通讯中,每个字符要用起始位和停止位作为字符开始和结束的标志,占用了时间;所以在数据块传递时,为了提高速度,常去掉这些标志,采用同步传送由于数据块传递开始要用同步字符来指示,同时要求由时钟来实现发送端与接收端之间的同步,故硬件较复杂通讯方向在串行通讯中,把通讯接口只能发送或接收的单向传送方法叫单工传送;而把数据在甲乙两机之间的双向传递,称之为双工传送在双工传送方式中又分为半双工传送和全双工传送半双工传送是两机之间不能同时进行发送和接收,任一时该,只能发或者只能收信息8051单片机的串行接口结构8051串行接口是一个可编程的全双工串行通讯接口它可用作异步通讯方式(UART),与串行传送信息的外部设备相连接,或用于通过标准异步通讯协议进行全双工的8051多机系统也可以通过同步方式,使用TTL或CMOS移位寄存器来扩充I/O口8051单片机通过引脚RXD(P
3.0,串行数据接收端)和引脚TXD(P
3.1,串行数据发送端)与外界通讯__UF是串行口缓冲寄存器,包括发送寄存器和接收寄存器它们有相同名字和地址空间,但不会出现冲突,因为它们两个一个只能被CPU读出数据,一个只能被CPU写入数据
5.4串行口控制寄存器SCON它用于定义串行口的工作方式及实施接收和发送控制字节地址为98H,其各位定义如下表D7D6D5D4D3D2D1D0__0__1__2RENTB8RB8TIRI__
0、__1串行口工作方式选择位,其定义如下__
0、__1工作方式功能描述波特率00方式08位移位寄存器Fosc/1201方式110位UART可变10方式211位UARTFosc/64或fosc/3211方式311位UART可变其中fosc为晶振频率__2多机通讯控制位在方式0时,__2一定要等于0在方式1中,当(__2)=1则只有接收到有效停止位时,RI才置1在方式2或方式3当(__2)=1且接收到的第九位数据RB8=0时,RI才置1REN接收允许控制位由软件置位以允许接收,又由软件清0来禁止接收TB8:是要发送数据的第9位在方式2或方式3中,要发送的第9位数据,根据需要由软件置1或清0例如,可约定作为奇偶校验位,或在多机通讯中作为区别地址帧或数据帧的标志位RB8接收到的数据的第9位在方式0中不使用RB8在方式1中,若(__2)=0,RB8为接收到的停止位在方式2或方式3中,RB8为接收到的第9位数据TI发送中断标志在方式0中,第8位发送结束时,由硬件置位在其它方式的发送停止位前,由硬件置位TI置位既表示一帧信息发送结束,同时也是申请中断,可根据需要,用软件查询的方法获得数据已发送完毕的信息,或用中断的方式来发送下一个数据TI必须用软件清0RI接收中断标志位在方式0,当接收完第8位数据后,由硬件置位在其它方式中,在接收到停止位的中间时刻由硬件置位(例外情况见于__2的说明)RI置位表示一帧数据接收完毕,可用查询的方法获知或者用中断的方法获知RI也必须用软件清
05.5串行口的工作方式8051单片机的全双工串行口可编程为4种工作方式,现分述如下
5.
5.1方式0方式0为移位寄存器输入/输出方式可外接移位寄存器以扩展I/O口,也可以外接同步输入/输出设备8位串行数据者是从RXD输入或输出,TXD用来输出同步脉冲输出串行数据从RXD引脚输出,TXD引脚输出移位脉冲CPU将数据写入发送寄存器时,立即启动发送,将8位数据以fos/12的固定波特率从RXD输出,低位在前,高位在后发送完一帧数据后,发送中断标志TI由硬件置位输入当串行口以方式0接收时,先置位允许接收控制位REN此时,RXD为串行数据输入端,TXD仍为同步脉冲移位输出端当(RI)=0和(REN)=1同时满足时,开始接收当接收到第8位数据时,将数据移入接收寄存器,并由硬件置位RI
5.
5.2方式1方式1为波特率可变的10位异步通讯接口方式发送或接收一帧信息,包括1个起始位0,8个数据位和1个停止位1输出当CPU执行一条指令将数据写入发送缓冲__UF时,就启动发送串行数据从TXD引脚输出,发送完一帧数据后,就由硬件置位TI输入在(REN)=1时,串行口采样RXD引脚,当采样到1至0的跳变时,确认是开始位0,就开始接收一帧数据只有当(RI)=0且停止位为1或者(__2)=0时,停止位才进入RB8,8位数据才能进入接收寄存器,并由硬件置位中断标志RI;否则信息丢失所以在方式1接收时,应先用软件清零RI和__2标志
5.
5.3方式2方式二为固定波特率的11位UART方式它比方式1增加了一位可程控位1或0的第9位数据输出:发送的串行数据由TXD端输出一帧信息为11位,附加的第9位来自SCON寄存器的TB8位,用软件置位或复位它可作为多机通讯中地址/数据信息的标志位,也可以作为数据的奇偶校验位当CPU执行一条数据写入SUBF的指令时,就启动发送器发送发送一帧信息后,置位中断标志TI输入:在(REN)=1时,串行口采样RXD引脚,当采样到1至0的跳变时,确认是开始位0,就开始接收一帧数据在接收到附加的第9位数据后,当(RI)=0或者(__2)=0时,第9位数据才进入RB8,8位数据才能进入接收寄存器,并由硬件置位中断标志RI;否则信息丢失且不置位RI再过一位时间后,不管上述条件时否满足,接收电路即行复位,并重新检测RXD上从1到0的跳变
5.
5.4方式3方式3为波特率可变的11位UART方式除波特率外,其余与方式2相同
5.6波特率设置
5.
6.1波特率设置如前所述,在串行通讯中,收发双方的数据传送率(波特率)要有一定的约定在8051串行口的四种工作方式中,方式0和2的波特率是固定的,而方式1和3的波特率是可变的,由定时器T1的溢出率控制
5.
6.
1.1方式0方式0的波特率固定为主振频率的1/
125.
6.
1.2方式2方式2的波特率由PCON中的选择位__OD来决定,可由下式表示波特率=2的__OD次方除以64再乘一个fosc,也就是当__OD=1时,波特率为1/32fosc,当__OD=0时,波特率为1/64fosc
5.
6.
1.3方式1和方式3定时器T1作为波特率发生器,其公式如下波特率=定时器T1溢出率T1溢出率=T1计数率/产生溢出所需的周期数式中T1计数率取决于它工作在定时器状态还是计数器状态当工作于定时器状态时,T1计数率为fosc/12;当工作于计数器状态时,T1计数率为外部输入频率,此频率应小于fosc/24产生溢出所需周期与定时器T1的工作方式、T1的预置值有关定时器T1工作于方式0溢出所需周期数=8192-x定时器T1工作于方式1溢出所需周期数=65536-x定时器T1工作于方式2溢出所需周期数=256-x因为方式2为自动重装入初值的8位定时器/计数器模式,所以用它来做波特率发生器最恰当当时钟频率选用
11.0592MHZ时,取易获得标准的波特率,所以很多单片机系统选用这个看起来“怪”的晶振就是这个道理下表列出了定时器T1工作于方式2常用波特率及初值常用波特率FoscMHZ__ODTH1初值
1920011.05921FDH
960011.05920FDH
480011.05920FAH
240011.05920F4h
120011.05920E8h串口中断设置
5.7程序代码6第五讲IIC总线与实时时钟8课时
6.1作业将实时时钟显示在数码管上
6.2IIC原理I2CInter-IntegratedCircuit总线是一种由Phil-ips公司__的两线式串行总线,用于连接微控制器及其__设备由于I2C总线仅用两根__线,并支持多主控工作方式,所以I2C总线在电子产品设备中应用非常普遍文献
[1]使用NiosⅡ的PIO接口模拟I2C时序完成对接口芯片的读写,而目前基于NiosⅡ的IP核越发丰富基于此,本文使用免费的IP核--I2C-__sterCore,实现了对I2C接口芯片的读写操作,扩充了一种新的设计方法本文首先介绍了I2C总线结构和工作原理,然后详细说明了基于NiosⅡ的I2C-__sterCore的使用方法,最后给出了C语言的编程代码1I2C总线基本原理I2C总线是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据在CPU与被控IC之间、进行双向传送,最高传送速度100kbit/sI2C总线在传送数据的过程__有4种基本类型__,分别是开始__、数据传输__、应答__和结束__a开始__SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据所有的命令都必须在开始条件以后进行b结束__SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据所有的操作都必须在停止条件以前结束总线开始和停止数据传送的时序如图1所示c数据传输__在开始条件以后,时钟__SCL的高电平周期期问,当数据线稳定时,数据线SDA的状态表示数据有效,即数据可以被读走,开始进行读操作在时钟__SCL的低电平周期期间,数据线上数据才允许改变每位数据需要一个时钟脉冲I2C总线的数据位传送时序如图2所示d应答__接收数据的从器件收到8bit数据后,向发送数据的主控器件发出特定的低电平脉冲,表示已收到数据这要求主器件必须产生一个与确认位相应的额外时钟脉冲第9个脉冲若主控器件确认失败,主控器件必须发送一个数据结束__给从器件这时从器件必须使SDA线保持高电平,使主控器件能产生停止条件总线的应答__时序见图
36.
2.1原理I2C总线是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据各种被控制电路均并联在这条总线上,CPU发出的控制__分为地址码和控制量两部分,地址码用来选址,即接通需要控制的电路,确定控制的种类;控制量决定该调整的类别这样,各控制电路虽然挂在同一条总线上,却彼此__,互不相关I2C总线在传送数据过程__有三种类型__,它们分别是开始__、结束__、数据__与应答__起始和终止__SCL线为高电平期间,SDA线由高电平向低电平的变化表示起始__数据__I2C总线进行数据传送时,时钟__为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的__为低电平期间,数据线上的高电平或低电平状态才允许变化应答__接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据CPU向受控单元发出一个__后,等待受控单元发出一个应答__,CPU接收到应答__后,根据实际情况作出是否继续传递__的判断若未收到应答__,由判断为受控单元出现故障
6.
2.2总线基本操作每一个字节必须保证是8位长度数据传送时,先传送最高位(M__),每一个被传送的字节后面都必须跟随一位应答位(即一帧共有9位)此应答位是接收端发出的在起始条件之后,必须是器件的控制字节,其中高四位为器件类型识别符(不同的芯片类型有不同的定义,EEPROM一般应为1010),接着三位为片选,最后一位为读写位,当为1时为读操作,为0时为写操作
6.3DS1307实时时钟
6.
3.1DS1307的工作时序发送方式为M__DS1307通过双向数据线SDA和时钟SCL与外界进行数据交换,其时序关系如图2所示 从时序图2中可看出,DS1307有2种操作方式
(1)写操作把SDA数据线上的数据按RAM指定的首地址(WordAddress)依次写入N个字节数据,其格式为
(2)读操作按RAM指定的首地址依次读出N个字节数据,其格式为 其中S为起始__,1101000为DS1307的口地址,A应答__,A非应答__,P停止__
6.
3.2程序代码发送方式为M__/***********************************************************************/voidI2C_startvoid{ SDA=1; SCL=1; Wait8us; SDA=0; Wait8us; SCL=0; }/***********************************************************************/voidI2C_stopvoid{ SDA=0; SCL=1; Wait8us; SDA=1; Wait4us; SCL=0;}/***********************************************************************voidI2C_send_ackvoid{ SDA=0; SCL=1; Wait4us; SCL=0;}*************************************************************************/voidI2C_send_noackvoid{ SDA=1; SCL=1; Wait4us; SCL=0;}/***********************************************************************/voidI2C_write_byteunsignedcharIIC_data{ unsignedchari; fori=0;i8;i++ { SCL=0; ifIIC_datai0x80 SDA=1; //判断发送位 elseSDA=0; Wait2us; SCL=1; Wait4us; SCL=0; } Wait4us; SDA=1;//发送完8bit释放总线准备接收应答位 Wait2us; SCL=1; Wait4us;//sda上数据即是从应答位 SCL=0;//不考虑从应答位但要控制好时序 }/***********************************************************************/unsignedcharI2C_read_bytevoid{ unsignedcharidat; dat=0; SDA=1; fori=0;i8;i++ { dat=dat1; SCL=1; Wait2us; ifSDA==1 { dat++; } SCL=0; } returndat;}/***********************************************************************//********************************DS1307PARTSTART ****************/voidWrite1307unsignedcharaddunsignedchardat{ I2C_start; I2C_write_byteWRITEDS1307; I2C_write_byteadd; I2C_write_bytedat; I2C_stop;} /***********************************************************************/unsignedcharRead1307unsignedcharadd{ unsignedchardat; I2C_start; I2C_write_byteWRITEDS1307; I2C_write_byteadd; I2C_start; I2C_write_byteREADDS1307; dat=I2C_read_byte; I2C_send_noack; I2C_stop; returndat; }/****************************读DS1307的寄存器*******************************************/voidRead_RTCvoid{ unsignedchari*p; p=rtc_address; fori=0;i7;i++ { read_rtc_code[i]=Read1307*p; p++; }}/***************************DS1307的初始化********************************************/voidSet_RTCvoid{ unsignedchari*p; p=rtc_address; fori=0;i7;i++ { Write1307*pset_rtc_code[i]; p++; }} 7第六讲超级终端8课时
7.1作业
7.
1.1用数码管显示超级终端写入的字符,数据
7.
1.2根据超级终端程序仿真找出以下变量在RAM或ROM中所指向的地址
7.
1.
2.1结构在RAM中占用的空间及内容所指向的地址
7.
1.
2.2结构数组RAM中占用的空间及内容所指向的地址
7.
1.
2.3指针在RAM中占用的空间及内容所指向的地址
7.
1.
2.4函数指针在RAM中占用的空间及内容所指向的地址
7.
1.
2.5指向指针的指针在RAM中占用的空间及内容所指向的地址
7.2超级终端原理
7.
2.1超级终端的作用超级终端可以作为产品__过程中程序__与检验的重要手段可以有效的分析程序代码它既可以分析单句程序;又可以分析程序模块的功能;也可以分析整个程序;是软件仿真之后最终要的仿真手段超级终端程序其根本是一个串口程序通过这个串口程序设计我们可以访问板卡上的所有硬件系统
7.
2.2超级终端的使用串口波特率设置为57600;程序架构SMC1602_C.cADC0831A_c.cds18b20_c.cDS1307_C.cPC超级终端程序)HyperTerminal.cRS232
7.3关键程序代码/*****************************************************************************/voidInitHyperTerminalvoid{TMOD|=0x21;/*timer1mode28bitreload*/SCON=0x50;/*serialmode18bituartenablere__ive*/PCON=0x80;/*__OD=1doublebaud*/TH1=0xFF;/*baud=57600fosc=
11.0592MHZ*/TL1=0xFF;RI=0;/*clearre__iveflag*/TI=0;/*clearsendflag*/TR1=1;/*starttimer1*/ES=1;/*enableserialinterrupt*/EA=1;/*enableallinterrupt*/IT1=1;TR0=1;EX1=1;XBYTE[BEEPADDR]=0x00;CursorPosion=0;ExecCom__ndFlag=0;memsetSerialBuffer
[0]\0__X_SERIAL_BUFFER_SIZE;//清除缓冲区memcpyPromptBuffer
[0]TW__X_PROMPT_BUFFER_SIZE;//命令提示行为TW//SerialSendStrF_LIGHTGREEN;//SerialSendStrB_BLACK;SerialSendStrCLEARSCREEN;SerialSendStr-----------------------------\r\n;SerialSendStrToWinHyperTerminalbyyuron__heng\r\n;SerialSendStrhttp://___.towintec.cn\r\n;SerialSendStr-----------------------------\r\n;SerialSendStr\r\n;SerialSendStrPromptBuffer
[0];}voidSerialSendBytechardat{__UF=dat;whileTI==0;TI=0;}voidSerialSendStrchar*str{while*str!=\0//发送不为空,ASCI码的null{SerialSendByte*str;str++;}}/*********************************************************************************串行中断服务程序**输入**描述如果有串口接收中断标志,代表收到一个字符,清RI标志,**缓存至局部变量__ufTemp,判断字符,退格键,删除键,则将缓冲区指针减一,**再更新屏幕显示,回车键,代表输入结束,置全局变量标志,有待解析字符,**其余的则就是用户输入的有效字符了,注意,这里有个缓冲区溢出判断,很关键*******************************************************************************/voidSerialInterruptvoidinterrupt4using3{char__ufTemp;ifRI{RI=0;__ufTemp=__UF;switch__ufTemp{case0x08://在switch-case语句中多个case可以共用一条执行语句case0x06:case0x07:case0x7E:case0x7F:ifCursorPosion0{CursorPosion--;SerialSendByte0x08;SerialSendByte;SerialSendByte0x08;}SerialBuffer[CursorPosion]=\0;break;case\r:case\n:case\0:SerialSendByte\r;SerialSendByte\n;ExecCom__ndFlag=1;break;case\t:break;default:ifCursorPosion__X_SERIAL_BUFFER_SIZE{SerialBuffer[CursorPosion]=__ufTemp;SerialSendByte__ufTemp;CursorPosion++;}else{CursorPosion=0;memsetSerialBuffer
[0]\0__X_SERIAL_BUFFER_SIZE;SerialSendStr\r\nWarnning:Yourcom__ndstringistoolong!\r\n\r\n;SerialSendStrPromptBuffer
[0];}break;}}}/*************************************************************************************描述这段代码是分析参数,即将用户输入的字符串比如“prompt8051”分析出参数的个**数,以及将每个参数分别存在数组里,一个二维数组,这段代码是借鉴VIVI里面的,**涉及到编译原理里的一些知识****形参描述**char**argv指向char*的指针,指向字符指针的指针**ar__-1是参数的数目,第一个参数是程序名,所以ar__至少有1,如果ar__大于1的话,说明有参数输入**argv是参数列表,argv
[1]是第一个参数的名字**typedefenum{PS_WHITESPA__//空白PS_TOKEN//使能PS_STRING//字符串PS_ESCAPE//退出}PARSESTATE;//枚举是指将变量的值一一列举出来,变量的值只限于列举出来的值的范围内*******************************************************************************///ParseArgsbufar__argvresid;voidParseArgschar*argstrchar*ar___pchar**argvchar**resid{charar__=0;charc;PARSESTATEstackedStatelastState=PS_WHITESPA__;whilec=*argstr!=0//接收缓冲区不为空{PARSESTATEnewState;//新的状态ifc==;lastState!=PS_STRINGlastState!=PS_ESCAPE//为c语言语句,且部位字符串状态和退出状态break;iflastState==PS_ESCAPE//最近状态为取消状态{newState=stackedState;}elseiflastState==PS_STRING//最近状态为字符串状态{ifc=={newState=PS_WHITESPA__;//字符串完成,新状态为空白状态*argstr=0;}else{newState=PS_STRING;//否则新状态为字符串状态}}elseifc==||c==\t//命令与后面的参数间隔空格或\t横向跳到下一制表位置tab键.){*argstr=0;//newState=PS_WHITESPA__;//又来了一个新的参数清除状态为空白}elseifc==//碰到双引号则为字符串状态{newState=PS_STRING;//新的状态为字符串*argstr++=0;argv[ar__++]=argstr;}elseifc==\\//反斜线符\不知道是什么意思?{stackedState=lastState;//保留最近状态newState=PS_ESCAPE;//新状态改为取消状态}else{iflastState==PS_WHITESPA__//如果状态为空白{argv[ar__++]=argstr;//ar__先赋值后++}newState=PS_TOKEN;//新状态为占用状态}lastState=newState;//最后状态为新的状态argstr++;//继续检测后面的字符}argv[ar__]=NULL;//清空后面的指针ifar___p!=NULL//指针地址不为空*ar___p=ar__;//help命令参数为1if*argstr==;{*argstr++=\0;}*resid=argstr;//缓冲区边缘为argstr,是第一个参数后的缓冲区地址}/*********************************************************************************执行命令函数**输入串行缓冲区****函数描述********************************************************************************原型externintstricmpchar*s1char*s2;用法#includestring.h功能比较字符串s1和s2,但不区分字母的大小写说明strcmpi是到stricmp的宏定义,实际未提供此函数当s1s2时,返回值0当s1=s2时,返回值=0当s1s2时,返回值0********************************************************************************原型externintstrcmpchar*s1char*s2,intn;用法#includestring.h功能比较字符串s1和s2的前n个字符说明当s1s2时,返回值0当s1=s2时,返回值=0当s1s2时,返回值0********************************************************************************原型externvoid*memsetvoid*bufferintcintcount;用法#includestring.h功能把buffer所指内存区域的前count个字节设置成字符c说明返回指向buffer的指针********************************************************************************intn1=strlenghost;//字符数组中字符的实际长度intn2=strlenstr;//指针指向的字符数组的实际长度intn3=strlengalloping;//字符串中字符的实际长度intn4=sizeofghost;//字符数组分配空间大小intn5=sizeofstr;//指针分配的空间大小intn6=sizeofgalloping;//字符串分配空间大小,注意最后一位要加上\0********************************************************************************char*line
[5];//指针数组表示line是一个5个元素的数组,每个元素是一个指向字符型数据的一个指针若设指向的字符型数据(字符串)分别是ONE、TWO、…、FIVE,则数组line的结构如图10-11所示而char*line
[5];表示line是指向一个长度为5的字符数组的指针*******************************************************************************/voidExecCom__ndchar*buf{charar__*argv
[8]*residi;COM__ND*Com__nd=0;unsignedchar___=0;while*buf{memsetargv0sizeofargv;//将指针数组清零,每个指针指向的地址都清除了ParseArgsbufar__argvresid;//命令参数分析,参数个数为ar__;参数内容放在argv
[8]指针数组指向的地址内//每个参数一个地址ifar__0{fori=0;i__X_COM__ND_NUM;i++//循环比较命令,如果查到就跳出循环,执行命令;否则返回错误{Com__nd=Com__ndList[i];//X:0000HPUBLICCom__ndList导致第一条命令总是有问题ifstrncmpCom__nd-Com__ndNameargv
[0]strlenargv
[0]==0//比较命令//ifstrcmpCom__nd-Com__ndNameargv
[0]==0{___=1;break;}else{___=0;//Com__nd=0;}}if___/*Com__nd*/==0{SerialSendStrCouldnotfound\;SerialSendStrargv
[0];SerialSendStr\com__nd\r\n;SerialSendStrIfyouwanttokonw__ailablecom__ndstypehelp\r\n\r\n;}else{Com__nd-Com__ndFuncar__argv;//执行具体功能函数}}buf=resid;}}/*********************************************************************************运行超级终端函数**输入执行命令标示ExecCom__ndFlag*********************************************************************************/voidRunHyperTerminalvoid{ifExecCom__ndFlag//如果有命令需要执行{ExecCom__ndSerialBuffer
[0];//执行命令传递串行缓冲数组地址SerialSendStrPromptBuffer
[0];//发送串行提示字符,传递串行提示符缓冲区地址memsetSerialBuffer
[0]\0__X_SERIAL_BUFFER_SIZE;//清空缓冲区,没什么可以解释的,为了下次正确执行必须这样做CursorPosion=0;//清除串行数据计数变量ExecCom__ndFlag=0;//清除命令标识}}8第七讲任务调度与前后台系统
8.1任务调度与前后台系统
8.
1.1问题引入假设有如下项目任务1:与上位机串行通信时间设置读温度任务2:有键盘输入正常情况下显示时间按键后显示温度任务3:定时检测外部温度任务4:读写实时时钟任务5:显示
8.2低级处理方式:Voiduart0interrupt4using1{……..}Void__in{…….While1{Key_scanRead_temperatureClock_operatedisplay}}其特点实时性差,冗余操作多
8.3高级处理方式
8.
3.1任务调度表Task1Task2Task3Task4Task51T12T113T14T15T116T17T18T119T110T
18.
3.2处理方式charcTimeFlag=FALSE;charcTaskNo=0;charcScanSlotNo=0;chartTaskTable[__X_SLOTNO][__X_TASKNO]={10000011001000001000100100100010000010011000001000};voiduart0interrupt4using1{…..}voidtimerinterrupt1using1{cTimeFlag=TRUE;}chartask_scan{ifcTimeFlag==FALSEreturnFALSE;cTimeFlag=FALSE;cScanSlotNo++;ifcScanSlotNo=__X_TASKNOcScanSlotNo=0;__urrentSlot=cScanSlotNo;returnTRUE;}void*FunctionPionter[__X_TASKNO]void;void__in{FunctionPionter
[0]=task1;FunctionPionter
[1]=task2;FunctionPionter
[2]=task3;FunctionPionter
[3]=task4;FunctionPionter
[4]=task5;while1{iftask_scan==TRUE{forI=0;I__X_TASKNO;I++{iftTaskTable[__urrentSlot][I]==1*FunctionPionter[I];}}}}9第八讲单总线与DS18B208课时
9.1硬件结构
9.21-wire命令序列典型的单总线命令序列如下第一步初始化第二步ROM命令跟随需要交换的数据第三步功能命令跟随需要交换的数据每次访问单总线器件必须严格遵守这个命令序列如果出现序列混乱则单总线器件不会响应主机但是这个准则对于搜索ROM命令和__搜索命令例外在执行两者中任何一条命令之后主机不能执行其后的功能命令必须返回至第一步
1.
1.4总线时序
9.3ROM搜索原理ROM搜索过程只是一个简单的三步循环程序读一位读该位的补码写入一个期望的数据位总线主机在ROM的每一位上都重复这样的三步循环程序当完成某个器件后主机就能够知晓该器件的ROM信息剩下的设备数量及其ROM代码通过相同的过程即可获得下面的ROM搜索过程实例假设四个不同的器件被连接至同一条总线上它们的ROM代码如下所示ROM100110101…ROM210101010…ROM311110101…ROM400010001…具体搜索过程如下1主机发出复位脉冲启动初始化序列从机设备发出响应的应答脉冲2接着主机在总线上发出ROM搜索命令3主机从总线上准备读入一个数据位这时每个响应设备分别将ROM代码的第一位输出到单总线上ROM1和ROM4输出0至总线而ROM2和ROM3输出1至总线线上的输出结果将是所有器件的逻辑与所以主机从总线上读到的将是0接着主机开始读另一位即每个器件分别输出ROM代码中第一位的补码此时ROM1和ROM4输出1至总线而ROM2和ROM3输出0至总线这样主机读到的该位补码还是0主机由此判定总线上有些器件的ROM代码第一位为0有些则为1两次读到的数据位具有以下含义00在该位处存在设备冲突01在该位处所有器件为010在该位处所有器件为111单总线不存在任何设备4主机写入0从而禁止了ROM2和ROM3响应余下的搜索命令仅在总线上留下了ROM1和ROM45主机再执行两次读操作依次收到0和1这表明ROM1和ROM4在ROM代码的第二位都是06接着主机写入0在总线上继续保持ROM1和ROM47主机又执行两次读操作收到两个0表明所连接的设备的ROM代码在第三位既有0也有18主机再次写入0从而禁止了ROM1响应余下的搜索命令仅在总线上留下了ROM29主机读完ROM4余下的ROM数据位这样就完成了第一次搜索并找到了位于总线上的第一个设备10重复执行第1至第7步开始新一轮的ROM搜索命令
9.4程序实现发送方式为L__voidstart_1wire{//uchari;DQ=0;delay500us;DQ=1;delay20us;whileDQ;//i=0;DQ=1;delay200us;}/********************************************************************************************************读一位函数定义**带返回值**********************************************************************************************************/bittmpreadbitvoid//读一位{uchari;bitdat;DQ=0;i++;//小延时一下低电平DQ=1;i++;i++;//高电平,释放总线dat=DQ;//读取DQi=8;whilei0i--;//延时returndat;}/********************************************************************************************************读一个字节函数定义**带返回值**********************************************************************************************************/uchartmpreadvoid//读一个字节{ucharijdat;dat=0;fori=1;i=8;i++{j=tmpreadbit;//读一位dat=j7|dat1;//读出的数据最低位在最前面,这样刚好//一个字节在DAT里}returndat;//将一个字节数据返回}/********************************************************************************************************写一个字节到DS18B20里函数定义************************************************************************************************************/voidwritebyteuchardat{//写一个字节到DS18B20里uinti;ucharj;bittestb;forj=1;j=8;j++{testb=dat0x01;dat=dat1;iftestb//写1部分{DQ=0;//低电平i++;i++;//延时DQ=1;//高电平i=8;whilei0i--;//延时保持}else{DQ=0;//写0部分低电平i=8;whilei0i--;//延时保持DQ=1;//拉高i++;i++;//延时}}}/*****************************************************************************************************以下写功能函数*******************************************************************************************************/voidtmpchange{start_1wire;writebyte0xcc;writebyte0x44;delay20us;}/********************************************************************************************************获得温度函数定义************************************************************************************************************/inttmp//获得温度{floattt;ucharab;start_1wire;//DS18B20初始化delay200us;writebyte0xcc;writebyte0xbe;//发送读取数据命令a=tmpread;//连续读两个字节数据b=tmpread;temp=b;temp=8;temp=temp|a;//两字节合成一个整型变量tt=temp*
0.0625;//得到真实十进制温度值,因为DS18B20//可以精确到
0.0625度,所以读回数据的最低位代表的是//
0.0625度temp=tt*10+
0.5;//放大十倍,这样做的目的将小数点后第一位//也转换为可显示数字,同时进行一个四舍五入操作returntemp;//返回温度值}10第九讲A/D转换4课时
10.1作业将ADC0831的外部电压值显示在数码管上
10.2A/D转换原理
10.
2.1ADC0831介绍
10.
2.2逐次逼近式A/D转换器原理逐次逼近式A/D转换器结构电路如图1所示,主要由采样保持电路、比较器、D/A转换器、逐次逼近寄存器和逻辑控制单元5部分组成HYPERLINKhttp://icgle.net/Technic/file/img/newsImgs/1476/202/
2007731124405138.jpg\t_blankINCLUDEPICTUREhttp://icgle.net/Technic/file/img/newsImgs/1476/202/
2007731124405138.jpg\*MERGEFORMAT转换中的逐次逼近是按对分原理,由控制逻辑电路完成的其工作过程如下启动转换后,控制逻辑电路首先把逐次逼近寄存器的最高位置1,其他位置0,将其存储到逐次逼近寄存器,然后经D/A转换后得到约为满量程输出一半的电压值这个电压值在比较器中与输入__进行比较 比较器的输出反馈到D/A转换器,并在下一次比较前对其进行修正即输入__的取样值与D/A转换器的初始输出值相减,余差被比较器量化,量化值再来指导控制逻辑是增加还是减少D/A转换器的输出;然后,这个新的D/A转换器输出值再次从输入取样值中被减去,不断重复这个过程,直至其精度达到要求为止由此可见,这种数据的转变始终处于逻辑控制电路的时钟驱动下,逐次逼近寄存器不断进行比较和移位操作,直到完成L__最低有效位的转换这时逐次逼近寄存器的各位值均已确定,逐次逼近转换完成
10.3时序
10.
3.1程序代码/*********************************************************************************read_byte**描述设定clk频率为100KHZ,周期为10us,高低各为5us*******************************************************************************/unsignedcharADC0831_read{unsignedcharitemp;ADC0831_CLK=0;ADC0831_CS=0;DelayADC0831;ADC0831_CLK=1;DelayADC0831;ADC0831_CLK=0;DelayADC0831;ADC0831_CLK=1;DelayADC0831;//芯片转换时间ADC0831_CLK=0;DelayADC0831;fori=0;i8;i++{temp=temp1;temp=temp|ADC0831_DO;ADC0831_CLK=1;DelayADC0831;ADC0831_CLK=0;DelayADC0831;}ADC0831_CS=1;returntemp;}
1.
1.5其它11第十讲红外线(8课时)
11.1作业
1、将遥控器的按键编码解码出来,制成编码表
2、编写破解遥控时序程序,能够将任意一个遥控器的红外时序破解下来
11.2红外遥控系统通用红外遥控系统由发射和接收两大部分组成应用编/解码专用集成电路芯片来进行控制操作,如图1所示发射部分包括键盘矩阵、编码调制、LED红外发送器;接收部分包括光、电转换放大器、解调、解码电路 HYPERLINKhttp://www.dzkf.cn/upimg/allimg/0611/1_
30120626.JPG\t_blankINCLUDEPICTUREhttp://www.dzkf.cn/upimg/allimg/0611/1_
30120626.JPG\*MERGEFORMAT 图1红外线遥控系统框图
1.
1.6遥控发射器及其编码遥控发射器专用芯片很多,根据编码格式可以分成两大类,这里我们以运用比较广泛,解码比较容易的一类来加以说明,现以__NEC的uPD6121G组成发射电路为例说明编码原理(一般家庭用的DVD、VCD、音响都使用这种编码方式)当发射器按键按下后,即有遥控码发出,所按的键不同遥控编码也不同这种遥控码具有以下特征 采用脉宽调制的串行码,以脉宽为
0.565ms、间隔
0.56ms、周期为
1.125ms的组合表示二进制的“0”;以脉宽为
0.565ms、间隔
1.685ms、周期为
2.25ms的组合表示二进制的“1”,其波形如图2所示 图2遥控码的“0”和“1”(注所有波形为接收端的与发射相反) 上述“0”和“1”组成的32位二进制码经38kHz的载频进行二次调制以提高发射效率,达到降低电源功耗的目的然后再通过红外发射二极管产生红外线向空间发射,如图3所示HYPERLINKhttp://www.dzkf.cn/upimg/allimg/0611/1_
30120758.JPG\t_blankINCLUDEPICTUREhttp://www.dzkf.cn/upimg/allimg/0611/1_
30120758.JPG\*MERGEFORMAT 图3遥控__编码波形图 UPD6121G产生的遥控编码是连续的32位二进制码组,其中前16位为用户识别码,能区别不同的电器设备,防止不同机种遥控码互相干扰该芯片的用户识别码固定为十六进制01H;后16位为8位操作码(功能码)及其反码UPD6121G最多额128种不同组合的编码遥控器在按键按下后,周期性地发出同一种32位二进制码,周期约为108ms一组码本身的持续时间随它包含的二进制“0”和“1”的个数不同而不同,大约在45~63ms之间,图4为发射波形图 图4遥控连发__波形 当一个键按下超过36ms,振荡器使芯片激活,将发射一组108ms的编码脉冲这108ms发射代码由一个引导码(9ms)一个结果码(
4.5ms)低8位地址码(9ms~18ms)高8位地址码(9ms~18ms)8位数据码(9ms~18ms)和这8位数据的反码(9ms~18ms)组成如果键按下超过108ms仍未松开,接下来发射的代码(连发码)将仅由起始码(9ms)和结束码(
2.25ms)组成 A40F0005050500000100010505050001010101010101010101010505050505050505A810061**3D0F0005050500000101010505050101010105010101010101010105050505050606A810062870F0004040400000000000404040000000100050101010101010501050505050505A810063660F0004040400000000000505040000010105050101010101010101050505050505A810064__0F0105050501010101010505050101010101010501010101010606010606060606A8100650F0005040400000000000504050101010105010501010101010105010505050505A8100667E0F0004040400000000000405050000010101050501010101010501010505050505A8100678F0F0005050500010101000505050101010105050501010101010101010505050505A810068CA0F0105050501000100010505050101010101010105010101010505050105050505A810069E30F0105050501010101010505050101010105010105010101010105050105050505A810060300F0005050500010101010505050101010101050105010101010501050105050505A810061+E20F0105050501010101010505050101010105050105010101010101050105050505A810062+590F0105050501010101010505050101010105010101050101010105050501050505A81006c-FC0F0105050501010101010505050101010101010101050101010505050501050505A81006c+060F0105050501010101010505050101010101050101050101010501050501050505A81005v+A70F0105050501010101010505050101010105050101050101010101050501050505A81006v-940F0105050501010101010505050101010105010105050101010105050101050505A81005屏显670F0004040400000000010504040000000000050005050001010501050101050505A80F05召回730F0004050501000000000405050000000004000400040000000105010501050505A80F05“静音”050F0005050500010101010505040101010105050500050101010101010501050505A80F05“正常”D00F0105050501010101010505050101010101010505010101010505010105050505A80F05“菜单”E40F0105050501010101010505050101010101050505050101010501010101050505A80F05“模式”110F0004050500000000000405050000000004000405050000000105010101050505A80F05“减”ED0F0105050501010101010505050101010101010505050101010505010101050505A81005“增”920F0105050501010101010505050101010101050501050101010501010501050505A91106“__/TV”110F0005040401010101010505050001010101010105050101010505050101050505A80F05“定时”C80F0105050501010101010505050101010101010501050101010505010501050505A81005“电源”**注意:红外发送芯片为HS9012上面为接收到的高电平的数据,**先对以上数据做以下分析**
1、起始码为
4.5ms低,
4.5ms高**
2、接着就是数据,可能为0,可能为1,**
3、0的高电平为
0.56ms1的高电平为
1.68ms**
4、连发码跟起始码一样,这样我们就只能够计数来区别了**
5、每当有1个
4.5ms低电平时,开始新码的接收如果接收到的码计数不为零则清除为零重新接收**
6、直到收满32个字节,然后清零接收码计数**
7、这样接收到连发码时,接收码的计数总是为1HS9012时序发送方式为L__**起始码:**--------------------**-------------**
4.5ms
4.5ms01****连发码:**-----------------------------------------------**-------------**
4.5ms
4.5ms
111.3遥控__接收接收电路可以使用一种集红外线接收和放大于一体的一体化红外线___,不需要任何外接元件,就能完成从红外线接收到输出与TTL电平__兼容的所有工作,而体积和普通的塑封三极管大小一样,它适合于各种红外线遥控和红外线数据传输 ___对外只有3个引脚Out、GND、Vcc与单片机接口非常方便,如图7所示HYPERLINKhttp://www.dzkf.cn/upimg/allimg/0611/1_
30120937.JPG\t_blankINCLUDEPICTUREhttp://www.dzkf.cn/upimg/allimg/0611/1_
30120937.JPG\*MERGEFORMAT 图7
①脉冲__输出接,直接接单片机的IO口
②GND接系统的地线(0V);
③Vcc接系统的电源正极(+5V);
1.
1.7遥控__的解码程序
11.4程序代码程序需要注意的问题精确延时延时需要精确计算,具体计算方法见__空间上的voidIR_decodevoid{unsignedcharijrec_data=0;if___//有中断发生,RED_ADD=0{___=0;EX0=0;//关闭外部中断0delay2400;delay1000;whileRED_ADD==0;//等待
4.5ms高电平delay1000;//延时
2.4ms,delay1000;//延时
2.4ms,共延时
4.8ms,超过
4.5msdelay1000;delay1000;delay600;whileRED_ADD==0;//接收第一个字节第bit0delay800;//延时
0.82msifRED_ADD{rec_data|=0x80;delay1000;}//rec_data=rec_data1;//右移一位ifrec_data//如果为接收的bit为1,则为连发码{rec_data=0;//清除接收字节EX0=1;//开启外部中断delay600;//延时
0.6msreturn;}fori=0;i7;i++//接收剩下的7个bit{rec_data=rec_data1;whileRED_ADD==0;//延时等待
0.56ms到高电平delay800;//延时
0.82msifRED_ADD{rec_data|=0x80;delay1000;}//rec_data=rec_data1;//右移一位}IR_data
[0]=rec_data;forj=0;j3;j++//循环接收3个字节{fori=0;i8;i++{rec_data=rec_data1;whileRED_ADD==0;//延时等待
0.56ms到高电平delay800;//延时
0.82msifRED_ADD{rec_data|=0x80;delay1000;}//rec_data=rec_data1;//右移一位}IR_data[j+1]=rec_data;}rec_data=0;//清除接收字节EX0=1;//开启外部中断send____=1;}}12第十一讲液晶显示模块__C1602(8课时)
12.1作业将DS1307的时间在液晶模块__C1602上显示
12.2液晶显示原理在七十年代初液晶开始作为一种显示媒体使用以来,液晶的应用范围被逐渐拓宽,到目前已涉及游戏机,__/__机,电视,笔记本电脑/掌上电脑,DC/DV以及液晶显示器等领域 在1984年,欧美提出了STN-LCD,而同时TFT-LCD技术也被提出,但仍不成熟,在80年代末,__掌握了STN-LCD的生产技术,在93年,__又掌握了TFT-LCD生产技术,液晶显示器开始向廉价低成本的方向发展,随后DSTN-LCD诞生;另一方面向高端的薄膜式晶体管TFT-LCD发展,97年,__建成了一大批大基板尺寸的第三代TFT-LCD生产线在此期间,韩国和我国__开始介入液晶显示器生产领域,我国__企业也引进生产线,生产TN-LCD,东亚地区逐渐发展成为世界液晶显示器的主要生产地,第三代半及___TFT-LCD生产线开始建立,__,韩国和中国(含__省)在液晶显示器生产及技术上开始走在世界最前列 大家知道,液晶是一种具有规则性分子排列的有机化合物,它即不是固体也不是液体,它是介于固态和液态之间的物质,把它加热时它会呈现透明的液体状态,把它冷却时它则会出现结晶颗粒的混浊固体状态液晶按照分子结构排列的不同分为三种粘土状的__ectic液晶,细柱形的Ne__tic液晶和软胶胆固醇状的Cholestic液晶这三种液晶的物理特性各不相同,而第二类的细柱形的Ne__tic液晶最适于用来制造液晶显示器 按物理结构常见的液晶显示器可分为以下几种 大家从上面就可看出TN、STN、DSTN三种液晶都属于无源矩阵LCD,它们的原理基本相同,不同之处只是各个液晶分子的扭曲角度略有差异而已,其中DSTN(俗称“伪彩”)在早期的笔记本电脑显示器及掌上游戏机上广为应用,但由于其必须借用外界光源来显像所以其有很大的应用局限性,但这些早期的反射型单色或彩色没有背光设计的LCD可以做得更薄、更轻和更省电,如果能在技术上对其进行革新这些东东对于掌上型电脑和游戏机来说还是非常有用的而TFT薄膜晶体管型有源矩阵LCD则是我们今天液晶显示器上应用的主流,它具有屏幕反应速度快,对比度好,亮度高,可视角度大,色彩丰富等优点 最早的液晶显示器TN它由玻璃板,偏光器,ITO膜,配向膜组成两个夹层等组成,它是所有液晶显示器技术原理的鼻祖而TFT液晶显示器同TN系列液晶显示器一样由玻璃基板、ITO膜、配向膜、偏光板等部分组成,它也同样采用两夹层间填充液晶分子的设计,只不过把TN上部夹层的电极改为FET晶体管,而下层改为共同电极在光源设计上,TFT的显示采用“背透式”照射方式,即假想的光源路径不是像TN液晶那样的从上至下,而是从下向上,这样的作法是在液晶的背部设置类似日光灯的光管光源照射时先通过下偏光板向上透出,它也借助液晶分子来传导光线,由于上下夹层的电极改成FET电极和共通电极在FET电极导通时,液晶分子的表现如TN液晶的排列状态一样会发生改变,也通过遮光和透光来达到显示的目的但不同的是,由于FET晶体管具有电容效应,能够保持电位状态,先前透光的液晶分子会一直保持这种状态,直到FET电极下一次再加电改变其排列方式相对而言,TN系列液晶屏就没有这个特性,液晶分子一旦没有施压,立刻就返回原始状态,这是TFT液晶屏的优点 大家知道TFT液晶显示器的每个点都由红绿蓝三部分组成,一般情况下15寸分辨率为1024X768的TFT液晶显示器的点距为
0.30mm左右TFT液晶显示器与CRT显示器不同,其具有固定的分辨率,只有在指定使用的分辨率下其画质才最佳,在其它的分辨率下可以以扩展或压缩的方式,将画面显示出来 此外,需要说明的是传统显示器由于采用电子枪发射电子束,在打到屏幕上会产生辐射源,尽管其现有产品在技术上已有了很大提高,把辐射损害不断降低,但仍然是无法根治的;而液晶显示器它辐射很低传统显示器的显示屏幕采用荧光粉,通过电子束打击荧光粉而显示图像,因而显示的明亮度比液晶的透光式显示更为明亮,在可视角度上也比TFT液晶显示器要好得多而在显示反应速度上,传统显示器由于技术上的优势,反应速度很好液晶显示器件LCD的显示原理是在两片玻璃基板上装有配向膜,所以液晶会沿着沟槽配向,具有偶极矩的液晶棒状分子在外加电场的作用下其排列状态发生变化,使得通过液晶显示器件的光被调制,从而呈现明与暗或透过与不透过的显示效果液晶显示器件中的每个显示像素都可以单独被电场控制,不同的显示像素按照控制__的“指挥”便可以在显示屏上组成不同的字符、数字及图形因此建立显示所需的电场以及控制显示像素的组合就成为液晶显示驱动器和液晶显示控制器的功能
12.3__C1602硬件描述下面我们以长沙太阳人电子有限公司的__C1602A为例子来进行讲解
12.
3.1电器特性
12.
3.2引脚说明
12.
3.3外形尺寸
12.4__C1602A连接参考
12.
4.18051系列总线方式
12.
4.28051系列模拟口连接方式
12.5__C1602时序
12.
5.1读操作时序
12.
5.2写操作时序
12.
5.3时序参数
12.6控制器接口说明
12.
6.1基本操作时序读状态输入RS=L,RW=H,E=H输出D0~D7=状态字写指令输入RS=L,RW=L,D0~D7=指令码 E=高脉冲输出无读数据输入RS=H,RW=H,E=H输出D0~D7=状态字写数据输入RS=H,RW=L,D0~D7=数据,E=高脉冲输出无
12.
6.2状态字说明注意对控制器每次进行读写操作之前,都必须进行读写检测,确保ST7为0如果LCD写完成则,ST7=0,否则为1___要读状态字?如果LCD模块来不及接收单片机发送的数据,这样LCD显示的数据就会出错只有确认LCD模块可以接收下一个字节的数据再发送类似串口通讯的TI、RI的功能
12.
6.3RAM地址映射图控制器内部带有80x8位(80字节)的RAM缓冲区,对应关系如下图所示注意看LCD两行的显示位置LCD两行显示的区域为00—0F,40—4F共32个字节空间的RAM;我们将数据写入就可在LCD上显示了
12.
6.4初始化设置命令显示模式设置显示开关/光标设置
12.
6.5数据与控制命令控制器内部设有一个数据地址指针,用户可以通过它们来访问内部的全部80字节RAM数据指针设置这样你要访问0地址则需要写入0x80的地址,要访问0x40地址,则要写入0xC0地址读数据看时序图,直接从P2口读数据就可以了,注意命令和数据的读写是有区别的写数据看时序图,直接将数据写到P2口就可以了其他设置(命令)
12.7LCD初始化过程(复位过程)时序延时15ms写指令38H(不检测忙__)延时5ms写指令38H(不检测忙__)延时5ms写指令38H(不检测忙__)(以后每次写指令、读/写数据操作之前均需检测忙__)写指令38H显示模式设置写指令08H显示关闭写指令01H显示清屏写指令06H显示光标__设置写指令0CH显示开及光标设置
12.8程序代码voidDisplay_1602void{LCD_write_char0x0fLINE2DS1307_rectime
[0]0x0f+0x30;LCD_write_char0x0eLINE2DS1307_rectime
[0]40x0f+0x30;LCD_write_char0x0cLINE2DS1307_rectime
[1]0x0f+0x30;LCD_write_char0x0bLINE2DS1307_rectime
[1]40x0f+0x30;LCD_write_char0x09LINE2DS1307_rectime
[2]0x0f+0x30;LCD_write_char0x08LINE2DS1307_rectime
[2]40x0f+0x30;LCD_write_char0x09LINE1DS1307_rectime
[4]0x0f+0x30;LCD_write_char0x08LINE1DS1307_rectime
[4]40x0f+0x30;LCD_write_char0x06LINE1DS1307_rectime
[5]0x0f+0x30;LCD_write_char0x05LINE1DS1307_rectime
[5]40x0f+0x30;LCD_write_char0x03LINE1DS1307_rectime
[6]0x0f+0x30;LCD_write_char0x02LINE1DS1307_rectime
[6]40x0f+0x30;#if1LCD_write_string0x0dLINE1day[DS1307_rectime
[3]-1];LCD_write_string0x0dLINE2:;LCD_write_string0x0aLINE2:;LCD_write_string0x07LINE1-;LCD_write_string0x04LINE1-;LCD_write_string0x00LINE120;#endif}/*********************************************************//**************LCD1602的初始化***************************/voidLCD_initvoid{delay_1ms15;LCD_RS=LOW;LCD_RW=LOW;LCDIO=LCD_DISPLAY_DOUBLE_LINE;DELAY2us;LCD_EN=HIGH;DELAY2us;LCD_EN=LOW;DELAY2us;delay_1ms5;LCD_RS=LOW;LCD_RW=LOW;LCDIO=LCD_DISPLAY_DOUBLE_LINE;DELAY2us;LCD_EN=HIGH;DELAY2us;LCD_EN=LOW;DELAY2us;delay_1ms5;LCD_RS=LOW;LCD_RW=LOW;LCDIO=LCD_DISPLAY_DOUBLE_LINE;DELAY2us;LCD_EN=HIGH;DELAY2us;LCD_EN=LOW;DELAY2us;LCD_send_com__ndLCD_DISPLAY_DOUBLE_LINE;//XBYTE[0xD000]=0x00;LCD_send_com__ndLCD_AC_AUTO_INCREMENT|LCD_MOVE_DISENABLE;delay_1ms5;LCD_send_com__ndLCD_DISPLAY_ON|LCD_CURSOR_OFF;delay_1ms5;LCD_send_com__ndLCD_CLEAR_SCREEN;delay_1ms5;}/***********************检测LCD状态*********************************/voidLCD_check_busyvoid{unsignedchartmp;LCDIO=0xff;do{LCD_RS=0;LCD_RW=1;DELAY2us;LCD_EN=1;//要求数据发送DELAY2us;tmp=LCDIO;LCD_EN=0;//EN下降沿数据输出DELAY2us;}whiletmp0x80/*LCD_BUSY==1*/;//=0允许操作//XBYTE[0xD000]=0x00;LCD_EN=0;}/************LCD1602写命令*******************************/voidLCD_send_com__nducharcom__nd{LCD_check_busy;LCD_RS=LOW;LCD_RW=LOW;DELAY2us;LCDIO=com__nd;DELAY2us;LCD_EN=HIGH;DELAY2us;LCD_EN=LOW;DELAY2us;}/********************************************************//*****************LCD1602写数据**************************/voidLCD_send_datauchardat{LCD_check_busy;LCD_RS=HIGH;LCD_RW=LOW;DELAY2us;LCDIO=dat;DELAY2us;LCD_EN=HIGH;DELAY2us;LCD_EN=LOW;DELAY2us;}/***********************LCD1602显示字符*********************************/voidLCD_write_charucharxucharyuchardat{unsignedcharaddress;ify==LINE1address=LINE1_HEAD+x;elseaddress=LINE2_HEAD+x;LCD_send_com__ndaddress;LCD_send_datadat;}/******************LCD1602显示字符串*********************/voidLCD_write_stringucharxucharyuchar*Data{ify==LINE1{ifxLINE_LENGTH{LCD_send_com__ndLINE1_HEAD+x;forx=0;xLINE_LENGTH*Data!=\0;x++{LCD_send_data*Data++;}if*Data!=\0{x=0;y=LINE2;}}}ify==LINE2{LCD_send_com__ndLINE2_HEAD+x;forx=0;xLINE_LENGTH*Data!=\0;x++{LCD_send_data*Data++;}}}13第十二讲重入函数与堆栈(4课时)可重入性(Reentrancy)可重入型函数可以被一个以上的任务调用,而不必担心数据的破坏可重入型函数任何时候都可以被中断,一段时间以后又可以运行,而相应数据不会丢失可重入型函数或者只使用局部变量,即变量保存在CPU寄存器中或堆栈中如果使用全局变量,则要对全局变量予以保护程序
2.1是一个可重入型函数的例子程序清单
2.1可重入型函数voidstrcpychar*destchar*src{while*dest++=*src++{;}*dest=NUL;}函数Strcpy做字符串__因为参数是存在堆栈中的,故函数Strcpy可以被多个任务调用,而不必担心各任务调用函数期间会互相破坏对方的指针不可重入型函数的例子如程序
2.2所示Swap是一个简单函数,它使函数的两个形式变量的值互换为便于讨论,假定使用的是可剥夺型内核,中断是开着的,Temp定义为整数全程变量程序清单
2.2不可重入型函数intTemp;voidswapint*xint*y{Temp=*x;*x=*y;*y=Temp;}程序员打算让Swap函数可以为任何任务所调用,如果一个低优先级的任务正在执行Swap函数,而此时中断发生了,于是可能发生的事情如图
2.6所示[F
2.61]表示中断发生时Temp已被赋值1,中断服务子程序使更优先级的任务就绪,当中断完成时[F
2.62],内核(假定使用的是μC/OS-Ⅱ)使高优先级的那个任务得以运行[F
2.63]高优先级的任务调用Swap函数是Temp赋值为3这对该任务本身来说,实现两个变量的交换是没有问题的,交换后Z的值是4,X的值是3然后高优先级的任务通过调用内核服务函数中的延迟一个时钟节拍[F
2.64]释放了CPU的使用权,低优先级任务得以继续运行[F
2.65].注意,此时Temp的值仍为3!在低优先级任务接着运行时,Y的值被错误地赋为3,而不是正确值1请注意,这只是一个简单的例子,如何能使代码具有可重入性一看就明白然而有些情况下,问题并非那么易解应用程序中的不可重入函数引起的错误很可能在测试时发现不了,直到产品到了现场问题才出现如果在多任务上您还是把新手,使用不可重入型函数时,千万要当心使用以下技术之一即可使Swap函数具有可重入性把Temp定义为局部变量调用Swap函数之前关中断,调动后再开中断用__量禁止该函数在使用过程中被再次调用如果中断发生在Swap函数调用之前或调用之后,两个任务中的X,Y值都会是正确的14AT24C02与分页机制
14.1作业对AT24C02进行页操作
14.2原理I2C接口芯片AT24C01/02工作原理AT24CXX系列芯片是采用I2C总线标准的常用的串行EEROM芯片本文以AT24C02为例介绍AT24C02具有256×82kbit的存储容量,即总共32页,每页有8字节的容量每次写入数据是从主器件发送来的片内选择地址开始写人,如果写到页末尾,主器件还在继续发送的话,不会自动转到下一页,而是从该页的头地址开始继续写入,覆盖该页的原有数据,而造成数据丢失AT24C02工作于从器件方式,它的地址由__的3个引脚A
2、A
1、A0决定,如图4所示在I2C总线上总共可以连接8个AT24C02接口芯片,每个器件硬件地址与控制寄存器的地址内容保持一致,就能够自由地与主控器件进行数据传输
14.
2.
1.1器件字节写操作在字节写模式下,发送器件写控制字,控制字包括4位固定器件码,3位片选码,以及一位低电平的写控制位主器件在收到从器件产生应答__后,主器件发送一个8位字节地址写入AT24C02主器件在收到从器件的另一个应答__后,再发送数据到被寻址的存储单元AT24C02再次应答,并在主器件产生停止__后开始内部数据的擦写,在内部擦写过程中,AT24C02不再应答主器件的任何请求时序见图
514.
2.
1.2器件随机地址读操作对AT24C02读操作的初始化方式和写操作时一样,仅把R/W位置为1图6所示为AT24C02随机地址读时序图随机读操作允许主器件对寄存器的任意字节进行读操作,主器件首先通过发送起始__、从器件地址和它想读取的字节数据的地址执行一个伪写操作在AT24C02应答之后,主器件重新发送起始__和从器件地址,此时R/W位置1,AT24C02响应并发送应答__,然后输出所要求的一个8位字节数据,主器件不发送应答__但产生一个停止__
14.3程序代码/***************************************************************功能:实现存储器EEPROMAT24C02的数据读写操作 采用IIC总线读写***************************************************************/#includeINTRINS.H#include____5xa.h#define WriteDevi__Address0xa0//写驱动地址指令#define ReadDevi__Address0xa1 //读驱动地址指令__itAT24C02_SCL=P2^3;__itAT24C02_SDA=P2^2;/*-------------------------------------------------------------功能发起始__------------------------------------------------------------*/voidStart_Cond{ AT24C02_SCL=0; _nop_; AT24C02_SDA=1; _nop_; AT24C02_SCL=1; _nop_; AT24C02_SDA=0; _nop_;}/*-------------------------------------------------------------功能发停止__------------------------------------------------------------*/voidStop_Cond{ AT24C02_SCL=0; _nop_; AT24C02_SDA=0; _nop_; AT24C02_SCL=1; _nop_; AT24C02_SDA=1; _nop_;}/*-------------------------------------------------------------功能发确认__------------------------------------------------------------*/voidAck{ AT24C02_SCL=0; _nop_; AT24C02_SDA=0; AT24C02_SCL=1; _nop_; AT24C02_SCL=0; _nop_; AT24C02_SDA=1;}/*-------------------------------------------------------------功能发无确认__------------------------------------------------------------*/voidNoAck{ AT24C02_SCL=0; _nop_; AT24C02_SDA=1; _nop_; AT24C02_SCL=1; _nop_; AT24C02_SCL=0; _nop_;}/*-------------------------------------------------------------功能写一个字节数据------------------------------------------------------------*/bitWrite8Bitunsignedcharinput{ unsignedchari; fori=0;i8;i++ { AT24C02_SCL=0; input=1; AT24C02_SDA=CY; AT24C02_SCL=1; } AT24C02_SCL=0; _nop_; AT24C02_SDA=1; AT24C02_SCL=1; _nop_; CY=AT24C02_SDA; returnCY;}/*-------------------------------------------------------------功能读一个字节数据------------------------------------------------------------*/unsignedcharRead8Bit { unsignedchartemprbyte=0; fortemp=8;temp!=0;temp-- { AT24C02_SCL=0; _nop_; rbyte=rbyte1|AT24C02_SDA; AT24C02_SCL=1; _nop_; } returnrbyte;}/*-------------------------------------------------------------功能从EEPROM中给定一个地址连续读NLEN个字节数据存放在以指针nContent开头的往下内容------------------------------------------------------------*/bitRead_Flashunsignedchar*nContentunsignedcharnAddrunsignedcharnLen{ unsignedcharAddr; Addr=nAddr; Start_Cond; //写开始__ Write8BitWriteDevi__Address; //写驱动地址 Write8BitAddr; //写从EEPROM中读的开始地址 Start_Cond; //写开始__ Write8BitReadDevi__Address; //写读数据指令 while--nLen { *nContent=Read8Bit; //读出内容 nContent++; //指针加1 Ack; //发确认__ } *nContent=Read8Bit; //读一字节 NoAck; //没有确认__ Stop_Cond; //发停止__ return0; //返回}/*-------------------------------------------------------------功能初始化EEPROM子程序内容为FF------------------------------------------------------------*/bitInit_FlashunsignedintnPage// 8Byte/1Pageinit0xFF{ unsignedcharnLen; unsignedcharAddr; nLen=8; Addr=8*nPage; Start_Cond; Write8BitWriteDevi__Address; Write8BitAddr; for;nLen!=0;nLen-- { ifWrite8Bit0xffbreak; //ifWrite8BitReturn1WriteFlase } Stop_Cond; returnCY;}/*-------------------------------------------------------------功能从EEPROM中给定一个地址连续写NLEN个字节数据存放在以指针nContent开头的往下内容------------------------------------------------------------*/bitWrite_Flashunsignedchar*nContentunsignedcharnAddrunsignedcharnLen{ unsignedcharitemp; unsignedcharAddr; Addr=nAddr; Start_Cond; //写开始__ Write8BitWriteDevi__Address; //写驱动地址 Write8BitAddr; //写从EEPROM中写的开始地址 fori=0;inLen;i++ { ifAddr%8==0 //每页8字节 //换页 { Stop_Cond; _nop_; Start_Cond; Write8BitWriteDevi__Address; Write8BitAddr; } temp=*nContent; ifWrite8Bittempbreak; //CY nContent++; Addr++; } Stop_Cond; //发停止__ returnCY;}15毕业总结作业基于前后台的多任务处理,包含的程序有液晶显示实时时钟年、月、日、时、分、秒、星期Lamp显示lamp0慢显,指示程序正常运行;lamp1快显,指示串口有数据收发,没有则灭LED显示显示温度超级终端程序可以查询实时时钟,温度
1.2第七讲(2课时)
1.
2.1标准串口通信协议
1.
2.2XMODEM
1.
2.3其它
1.
2.
41.
2.5shell
1.3第八讲(2课时)
1.
3.1uCOS-II
1.4第九讲(2课时)
1.
4.1uCOS-II
1.5第十讲(2课时)
1.
5.1uCOS-II
1.6第十一讲(2课时)
1.
6.1uCOS-II
1.7第十二讲(2课时)
1.
7.1软件容错
1.
7.2软件烧写
1.
7.3软件测试
1.
7.4软件__流程
1.
7.5结业总结与应聘面试蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁螆羀聿莀袈膅莈荿薈羈芄莈蚀膄芀莇袂羆膆莆羅衿蒄莅蚄肅莀莅螇袈芆莄衿肃膂蒃蕿袆肈蒂蚁肁莇蒁螃袄莃蒀羆肀艿葿蚅羂膅葿螇膈肁蒈袀羁荿蒇蕿膆芅薆蚂罿膁薅螄膄肇薄袆羇蒆薃蚆螀莂薃螈肆芈薂袁袈膄薁薀肄肀薀蚃袇荿虿螅肂芅蚈袇袅膀蚇薇肀肆蚇蝿袃蒅蚆袂腿莁蚅羄羂芇蚄蚃膇膃芁____________________________________________________________________________________________株洲市天元区泰山路留学生创业园A1栋608室Tel15073383131__1020662240http://___.towintec.cn。